nginx root alias proxypass

在 Nginx 中,root 和 alias 都是用于指定请求对应的文件系统路径的指令,但它们的工作方式和配置逻辑有显著区别,主要体现在路径拼接方式上。

1. 核心区别:路径拼接逻辑

  • root 指令:会将 location 匹配的路径完整拼接到 root 指定的路径后,形成最终的文件路径。
     
    公式:最终路径 = root路径 + location匹配的完整路径
  • alias 指令:会将 location 匹配的路径替换为 alias 指定的路径,仅保留 location 中匹配部分之后的路径进行拼接。
     
    公式:最终路径 = alias路径 + location匹配部分之后的剩余路径

2. 配置示例对比

假设请求 URL 为:http://example.com/static/foo.txt

(1)使用 root 配置

location /static/ {
    root /var/www;  # root路径为 /var/www
}
  • 解析过程:
     
    location 匹配到的路径是 /static/,因此最终路径为:
     
    /var/www(root 路径) + /static/foo.txt(完整请求路径) → /var/www/static/foo.txt

(2)使用 alias 配置

location /static/ {
    alias /var/www/;  # alias路径为 /var/www/
}
  • 解析过程:
     
    location 匹配到的 /static/ 被替换为 /var/www/,剩余路径 foo.txt 拼接到后面,最终路径为:
     
    /var/www/(alias 路径) + foo.txt(剩余路径) → /var/www/foo.txt

 

3. 其他关键区别

特性rootalias
适用场景 用于匹配目录(推荐带 /),适合整个站点或目录的根路径映射。 用于替换特定路径(必须精确匹配,推荐带 /),适合别名映射(如短路径指向长路径)。
路径末尾 / 可选,但建议目录路径带 / 以避免歧义。 必须严格匹配:如果 location 以 / 结尾,alias 也必须以 / 结尾,否则可能导致路径错误。
正则 location 支持(但需注意正则匹配的路径拼接)。 不支持alias 不能用于正则表达式的 location 中(会报错)。
默认索引文件 若请求目录,会自动查找 index 指令指定的文件(如 index.html)。 同样支持 index,但需确保 alias 路径下存在对应文件。

 

 

 

一般情况下,在location /中配置root,在location /other中配置alias。

 

proxy_pass  最后带上/会把匹配的部分吃掉,没有带上/会把匹配的东西也带上

下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。
第一种:

  location /proxy/ {
     proxy_pass http://127.0.0.1:81/;
}

会被代理到http://127.0.0.1:81/test.html 这个url
 
第二咱(相对于第一种,最后少一个 /)

   location /proxy/ {
     proxy_pass http://127.0.0.1:81;
}

会被代理到http://127.0.0.1:81/proxy/test.html 这个url
 
第三种:

location /proxy/ {
     proxy_pass http://127.0.0.1:81/ftlynx/;
}

会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。
 
第四种情况(相对于第三种,最后少一个 / ):

location /proxy/ {
     proxy_pass http://127.0.0.1:81/ftlynx;
}

会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url

 

第五种情况

location /oms_api {
proxy_pass http://omsapi/;

域名/oms_api/123===http://omsapi/123

 

第六种情况

location /api {
proxy_pass http://10.200.25.79:8038;

http://hexpress-ui.test.ydjia.cn/api/MainWeb/GetSUserBase  ===http://10.200.25.79:8038/api/MainWeb/GetSUserBase 

 

posted @ 2021-05-11 22:32  我才是酷酷的飞  阅读(354)  评论(1)    收藏  举报