关于两个nginx经常忽略的细节

1.root 和alias区别
在日常的工作中,nginx server下location经常要指定到其他目录,如图片,但是这里就经常发现我是需要用root还是alias来指定路径,这里就分析下
1:root不会丢弃location后面配置的路径,而alias会丢弃,把当前匹配到的目录指向到指定的录
2:使用alias时,目录名后面一定要加”/”
3:alias只能位于location块中
建议:location 非/的配置alias
location / 下配置root
范例:
root:
location /request_path/image/ {
root /local_path/image/;
}

location /request_path/image/ {
root /local_path/image/;
}
这样配置的结果就是当客户端请求 /request_path/image/cat.png 的时候, nginx把请求映射为/local_path/image/request_path/image/cat.png
alias:
location /request_path/image/ {
alias /local_path/image/;
}
这时候,当客户端请求 /request_path/image/cat.png 的时候, Nginx把请求映射为/local_path/image/cat.png
location /files {
alias /mnt/myfile/;
index index.html index.htm;
}
这时候客户端请求/files/1.img的时候,nginx把请求映射为/mnt/myfile/1.img,去/mnt/myfile/下寻找资源
alisa和root功能
location /i {
alias /var/www/html/images/;
}
在这个location段配置中,如果url请求"/i/logo.gif",那么nginx将会在服务器上查找"/var/www/html/images/logo.gif"文件。即请求的url中后面的部分会被追加到alias指定的目录后面,而location后面的 /i 路径会被自动丢弃
对比:
location /i {
root /var/www/html/images/;
}
在这个location段配置中,如果url请求"/i/logo.gif",那么nginx将会在服务器上查找"/var/www/html/images/i/logo.gif"文件
alias和root的区别:alias指定的目录是当前目录,而root指定的目录是根目录。一般情况下建议在"location /"中通过root来制定目录,而在其他目录匹配的位置用alias指令。
2.nginx proxy_pass后的url加不加/的区别
nginx反向代理配置去除前缀:https://www.jianshu.com/p/7c6f4080ac8d
第一种:proxy_pass后缀不加斜杠
location /abc/ {
proxy_pass http://172.16.1.38:8080;
}
结果:如果访问url http://www.server.com/abc/test.jsp,则被nginx代理后,请求路径会变成http://proxy_pass/abc/test.jsp,将abc/ 作为根路径,请求abc/路径下的资源
第二种:proxy_pass后缀加斜杠
location /abc/ {
proxy_pass http://172.16.1.38:8081/;
}
如果访问url http://www.server.com/abc/test.jsp,则被nginx代理后,请求路径会变为 http://proxy_pass/test.jsp,直接访问server的根资源
proxy_pass的结尾有/, 则会把/abc/*后面的路径直接拼接到后面,即移除abc这个前缀。
加斜杠相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走

版权声明:
作者:allenjol
链接:https://www.ayunw.cn/archives/473
来源:爱生活,爱运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>