nginx那点事儿——nginx中关于root、alias及localtion、proxy_pass后面是否有/的区别
2021/11/1 7:12:42
本文主要是介绍nginx那点事儿——nginx中关于root、alias及localtion、proxy_pass后面是否有/的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
nginx那点事儿——nginx中关于root、alias及localtion、proxy_pass后面是否有/的区别
- 一. nginx root与alias区别
- 二. root 或 alias 或 location 或 proxy_pass 后面加和不加 / 有啥区别
一. nginx root与alias区别
root和alias都用来指定页面路径,但用法不同
-
使用位置不同
[root]
语法:root path
默认值:root html
配置段:http、server、location、if
[alias]
语法:alias path
配置段:location
-
在 location 中使用时,匹配规则不一样
使用root时,访问的url是root定义的目录加上location匹配的路径
location /assets/ { root /git/shortUrl/dist/; } 访问 http://domain/assets/a.js 时, 实际访问:http://domain/git/shortUrl/dist/assets/a.js
使用alias时,访问的url直接是alias所定义的路径
location /assets/ { alias /git/shortUrl/dist/; } 访问 http://domain/assets/a.js 时,实际访问:http://domain/git/shortUrl/dist/a.js
二. root 或 alias 或 location 或 proxy_pass 后面加和不加 / 有啥区别
-
root与alias后面定义的目录 加不加 / 都一样
server { listen 8082; server_name localhost; location ^~ /root/ { root /data/www/root/; index index.html index.htm; } location ^~ /alias/ { alias /data/www/alias/; index index.html index.htm; } }
-
location后面匹配的uri加不加 / 匹配有所不同
server { listen 8082; server_name localhost; location ^~ /alias/ { echo "WITH: /"; } location ^~ /alias { echo "WITHOUT: /"; } }
结论:
/alias/ 只能匹配到/alias/123 /alias/abc 这种格式的url
/alias 不仅可以匹配带/alias/123 /alias/abc 这种, 还可以匹配到/alias123 /aliasabc
如果两个规则同时存在,由于匹配精确度越高优先级越高的原因,/alias 匹配不到 /alias/123
-
proxy_pass后面加不加 / 匹配有所不同
echo 'proxy test' >/date/www/proxy_pass/proxy/index.html echo 'test' > /date/www/proxy_pass/index.html server { listen 7000; server_name localhost; location / { root /data/www/proxy_pass; } }
代理不带项目名称,没有 /
server { listen 7001; server_name locahost; location /proxy/ { proxy_pass http://127.0.0.1:7000; } }
代理不带项目名称,但是有 /
server { listen 7002; server_name locahost; location /proxy/ { proxy_pass http://127.0.0.1:7000/; } }
没有/ 访问到 proxy test页面 有/访问到test页面
结论:
proxy_pass 后面不带 /,我们自定义的路径名会当成url的一部分拼接到后端url里。 7001端口实际访问http://127.0.0.1:7000/proxy/index.html
proxy_pass 后面带 /,我们的自定义的路径名就不会被视作url的一部分去拼接到后端url。 7002端口实际访问http://127.0.0.1:7000/index.html
如果是带 / 这种情况,location后面只能用
=、^~、/
匹配方式,也就是精确匹配、开头匹配及通配,不能使用~
正则匹配这种方式,会报错:nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /usr/local/nginx/conf/nginx.conf:69
这篇关于nginx那点事儿——nginx中关于root、alias及localtion、proxy_pass后面是否有/的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-13用Nginx防范DDoS攻击的那些事儿
- 2024-12-13用Terraform在AWS上搭建简单NGINX服务器指南
- 2024-10-29Nginx发布学习:从入门到实践的简单教程
- 2024-10-28Nginx发布:新手入门教程
- 2024-10-21nginx 怎么设置文件上传最大20M限制-icode9专业技术文章分享
- 2024-10-17关闭 nginx的命令是什么?-icode9专业技术文章分享
- 2024-09-17Nginx实用篇:实现负载均衡、限流与动静分离
- 2024-08-21宝塔nginx新增8022端口方法步骤-icode9专业技术文章分享
- 2024-08-21nginx配置,让ws升级为wss访问的方法步骤-icode9专业技术文章分享
- 2024-08-15nginx ws代理配置方法步骤-icode9专业技术文章分享