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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。