学习自:
nginx location/区别详解_nginx_脚本之家
nginx的location与proxy_pass指令超详细讲解及其有无斜杠( / )结尾的区别_nginx location 斜杠-CSDN博客
nginx的location、root、alias指令用法和区别 – 蓝队云
Nginx系列-5 root和alias和index和try_files_nginx root index-CSDN博客
nginx root和index是什么 nginx location root配置_mob64ca140c75c7的技术博客_51CTO博客
1、前提
1)明确Server和URL
Server:提供HTTP服务的程序,通常为IP:Port的形式
URL:请求的资源在HTTP服务器上的路径,
http://127.0.0.1:8080/server/
Server:127.0.0.1:8080
URL:/server/
http://127.0.0.1:8080
Server:127.0.0.1:8080
URL:缺省,默认为/
2)location
location为对url的识别和匹配,我们在HTTP上输入的URL并非服务器上的路径(实际上我们也不知道别人服务器的文件组织结构是啥样)。
因此必须要有一个将url映射到服务器路径的机制,这就是nginx的主要工作之一。
这项工作是通过在nginx上配置location项实现的。
location url{
……
}
这样就可以将在1)中所说的url进行匹配,进而1)继续进行转发(转发到具体的微服务工程),通过proxy_pass关键字执行;2)直接在本地路径中找到所需的资源,并把该资源返回,通过root、alias、index关键字执行。
因此需要区分转发、直接返回资源两种情况。
2、proxy_pass:二次转发
写法:
location url1{
proxy_pass server2/url2
}
1)/url2为空
此时只有一个server2,那么转发的地址为server2/url1,是唯一一种会把url1拼到最终URL中的方式;
2)url2为空
此时只有一个单斜杠/,那么最终的转发地址为server2/
3)其他情况
当url2不为空时,实际转发地址的拼接规则均为
1)先从HTTP请求的URL中将server/url1拆出来;
2)剩余部分原封不动的拼到server2/url2之后
例子:
1)/url2为空
访问:www.test.com/api/upload
location /api{
proxy_pass http://127.0.0.1:8080
}
此时不管location后为/api还是/api/,都是转发到http://127.0.0.1:8080/api/upload。
这也是唯一一种会把location匹配的url拼到proxy_pass中的方式。
2)url2为空(与1的区别在于1连前边的斜杠都没有)
访问:www.test.com/api/upload
location /api{
proxy_pass http://127.0.0.1:8080/
}
此时不管location后为/api还是/api/,都是转发到http://127.0.0.1:8080/upload。
3)其他情况:url2不空
访问:www.test.com/api/upload
①location /api{
proxy_pass http://127.0.0.1:8080/server/
}
转发到http://127.0.0.1:8080/server/upload
②location /api/{
proxy_pass http://127.0.0.1:8080/server/
}
转发到http://127.0.0.1:8080/serverupload(这是因为把访问的url中将/api/拆去,剩下的部分只剩一个upload)
4)url末尾无斜杠
访问:www.test.com/api/upload
location /api{
proxy_pass http://127.0.0.1:8080/server
}
转发到http://127.0.0.1:8080/server/api/upload
标签:127.0,8080,0.1,Nginx,api,location,斜杠,pass From: https://www.cnblogs.com/ShineLeBlog/p/18381057