Nginx中的location路径映射问题

来自:网络
时间:2024-09-10
阅读:

Nginx location路径映射

nginx 配置 proxy_pass时可以实现URL路径的部分替换

1.proxy_pass的目标地址后,默认不带/,表示只代理域名,url和querystring部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)

2.目标地址后带/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

例子:

server {
        location  /xxx {
                proxy_pass http://server_url;
        }

       location  /xxx {
                proxy_pass http://server_url/;
        }
 }

比如请求 域名/xxx/index.html

实际代理的目标url分别是

  • proxy_pass不带/:http://server_url/xxx/index.html(直接拼接到路径后)
  • proxy_pass带/:http://server_url/index.html (xxx被去掉)

Nginx的location匹配规则

Nginx的location语法

location [=|~|~*|^~] /uri/ { … }
  • = 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
  • ~ 区分大小写匹配(可用正则表达式)
  • ~* 不区分大小写匹配(可用正则表达式)
  • !~ 区分大小写不匹配
  • !~* 不区分大小写不匹配
  • ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式

示例1:

location  / { }

匹配任意请求

示例2:

location ~* .(gif|jpg|jpeg)$ {
    rewrite .(gif|jpg|jpeg)$ /logo.png;
}

不区分大小写匹配任何以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求

location ~ ^.+\.txt$ {
    root /usr/local/nginx/html/;
}

区分大小写匹配以.txt结尾的请求,并设置此location的路径是/usr/local/nginx/html/。

也就是以.txt结尾的请求将访问/usr/local/nginx/html/ 路径下的txt文件

alias与root的区别

  • root 实际访问文件路径会拼接URL中的路径
  • alias 实际访问文件路径不会拼接URL中的路径

示例如下:

location ^~ /sta/ {  
   alias /usr/local/nginx/html/static/;  
}
  • 请求:http://test.com/sta/sta1.html
  • 实际访问:/usr/local/nginx/html/static/sta1.html 文件
location ^~ /tea/ {  
   root /usr/local/nginx/html/;  
}
  • 请求:http://test.com/tea/tea1.html
  • 实际访问:/usr/local/nginx/html/tea/tea1.html 文件

last 和 break关键字的区别

(1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异

(2)last 和 break 当出现在location 内部时:

  • last 使用了last 指令,rewrite 后会跳出location 作用域,重新开始再走一次刚才的行为
  • break 使用了break 指令,rewrite后不会跳出location 作用域,它的生命也在这个location中终结

permanent 和 redirect关键字的区别

  • rewrite … permanent 永久性重定向,请求日志中的状态码为301
  • rewrite … redirect 临时重定向,请求日志中的状态码为302

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

返回顶部
顶部