Nginx中的location路径映射问题

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

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 永久性重定向,请求日志中的状态码为301rewrite … redirect 临时重定向,请求日志中的状态码为302

总结

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


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容