nginx路径相关配置汇总

一、root和alias的区别

root是将root配置的路径和location配置的路径拼接;alias则是用alias的路径替换location配置的路径

bash 复制代码
# 返回localhost:port/html/test/index.html的文件 
location ^~ /test/ { 
    root html/;
    index index.html index.htm;
} 
# 返回localhost:port/html/test/index.html的文件 
location ^~ /test/ { 
    alias html/test/; 
    index index.html index.htm;
}

二、 location路径末尾有无/的区别

1.location末尾没有/,则以结尾路径进行模糊匹配,配置location /test/a,则可以匹配/test/a,/test/a/,/test/a/b,/test/abc
  • /test/a
  • /test/a/
  • /test/a/b
  • /test/abc(是的,也会匹配!)
bash 复制代码
lication /test/a {
    alias html/test/;
    index index.html index.htm;
}
2.location末尾有/,则以结尾路径进行精确匹配,配置location /test/a/,则可以匹配/test/a/,/test/a/b,不能匹配/test/a,/test/abc
  • /test/a/
  • /test/a/b
  • /test/a(严格来说不匹配,但有时会301重定向到有/的版本)
  • /test/abc
bash 复制代码
lication /test/a/ {
    alias html/test/;
    index index.html index.htm;
}

使用 proxy_pass 配置反向代理,在匹配到 location 配置的 URL 路径后,转发请求到 proxy_pass 配置额 URL,方向代理后的地址与 proxy_pass 路径末尾是否有"/"有关;

三、proxy_pass 路径末尾有无/的区别

1.proxy_pass 路径末尾配置/表示绝对路径,当请求匹配到/api/时,会直接将替换为 proxy_pass 的路径
javascript 复制代码
location   /api/  {
      proxy_pass    http://127.0.0.1:8080/;
}

请求 http://xxx/api/get,将会被 nginx 转发请求到http://127.0.0.1:8080/get(未附加/api/路径)。

2.proxy_pass 路径末尾没有/表示相对路径,当请求匹配到/api/时,会拼接 proxy_pass 的路径
javascript 复制代码
location   /api/  {
      proxy_pass    http://127.0.0.1:8080;
}

请求 http://xxx/api/get,将会被 nginx 转发请求到http://127.0.0.1:8080/api/get(拼接/api/路径)。

四、try_files 当配置资源请求失败时,尝试访问try_files路径下的资源

由于vue项目是SPA,只有一个html页面,当使用项目history模式,在访问子路由时,刷新页面会nginx报错404,则需要配置try_files,使得nginx在访问资源失败时,尝试访问try_files配置的资源路径;

bash 复制代码
lication /test/ {
    alias html/test/;
    index index.html index.htm;
    try_files $uri $uri/ /test/index.html;
}

项目访问localhost:port/test/根路径则可以正常访问,当访问子路由localhost:port/test/home刷新页面之后则请求不到资源,则依次读取try_files下的资源,$uri指代我们访问的路径/test/home,访问失败,则最终访问我们配置的/test/index.html,返回资源。

相关推荐
PHP实战开发录9 小时前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发
「、皓子~15 小时前
海狸IM 2.1 私有化部署从零到一:中间件、微服务与 Nginx 全流程
nginx·flutter·微服务·中间件·开源软件·im·海狸im
徐小黑ACG1 天前
nginx配置文件
linux·服务器·nginx
考虑考虑1 天前
nginx打印请求日志
运维·后端·nginx
Rain的Java大神之路2 天前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
Lsetea2 天前
Nginx报SSL_CTX_use_PrivateKey failed:证书与私钥不匹配怎么排查
nginx·https·ssl证书·openssl·私钥
!chen2 天前
客户环境 Nginx 配置流式报表与超时排查
运维·nginx
大喵桑丶3 天前
AlmaLinux 9 上基于 PostgreSQL + Nginx 部署高可用轻量级 Gitea 服务
nginx·postgresql·gitea
我最爱吃鱼香茄子3 天前
【踩坑实录】若依Vue宝塔部署:验证码空白、反复提示登录状态已过期|完整排错
nginx·宝塔·若依·ruoyi‑vue·登录状态已过期
dazhong20123 天前
Docker 进阶篇(二) Docker Compose 部署 Nginx 实践
nginx·docker·容器