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,返回资源。

相关推荐
高木木的博客1 天前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
徐子元竟然被占了!!1 天前
Nginx
运维·nginx
图图玩ai1 天前
SSH 命令管理工具怎么选?从命令收藏到批量执行一次讲清
linux·nginx·docker·ai·程序员·ssh·可视化·gmssh·批量命令执行
CXH7281 天前
nginx——https
运维·nginx·https
Lentou2 天前
nginx反向代理
运维·nginx
遇见火星2 天前
linux设置开启启动服务
linux·运维·服务器·nginx
咸鱼翻身小阿橙2 天前
QT P4
数据库·qt·nginx
o丁二黄o2 天前
若依部署Nginx和Tomcat
运维·nginx·tomcat
一个public的class2 天前
前后端 + Nginx + Gateway + K8s 全链路架构图解
前端·后端·nginx·kubernetes·gateway
bukeyiwanshui2 天前
20260420 Nginx 服务器
运维·服务器·nginx