1.当location后面有/时
server
{
listen 90;
server_name localhost;
location /test/ {
default_type application/json ;
return 200 '{"name":"测试","result":"success"}';
}
}
如果在浏览器输入http://127.0.0.1:90/test/时,测试成功
如果浏览器输入http://127.0.0.1:90/test时,404
如果浏览器输入http://127.0.0.1:90/test/aaa时,测试成功
如果浏览器输入http://127.0.0.1:90/testXXXX/时,404
2.当location后面没有/时
如果浏览器输入http://127.0.0.1:90/test,测试成功
如果浏览器输入http://127.0.0.1:90/test/,测试成功
如果浏览器输入http://127.0.0.1:90/test/aaa时,测试成功
如果浏览器输入http://127.0.0.1:90/testXXX时,测试成功
结论:
当后面有/时,只能访问test/ 以及test/xxx等路径。
当后面没有/时,可以访问test开头的任意路径。
3.proxy_pass后面没有斜杠并且没有域名时:
首先搭建一个测试环境,使用Hbuilder创建一个web页面。127.0.0.1:8020是Hbuilder的端口号
server
{
listen 90;
server_name localhost;
location /X-admin/ {
proxy_pass http://127.0.0.1:8020;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问成功 ,说明代理后的路径为:http://127.0.0.1:8020/X-admin/admin-add.html
4.proxy_pass后面有斜杠并且没有域名时:
server
{
listen 90;
server_name localhost;
location /X-admin/ {
proxy_pass http://127.0.0.1:8020/;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问失败,其实它真正访问的路径为:http://127.0.0.1:8020/admin-add.html
5.proxy_pass后面有斜杠并且有域名时:
server
{
listen 90;
server_name localhost;
location /X-admin/ {
proxy_pass http://127.0.0.1:8020/X-admin/;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问成功,
6.proxy_pass后面没有斜杠并且有域名时:
server
{
listen 90;
server_name localhost;
location /X-admin/ {
proxy_pass http://127.0.0.1:8020/X-admin;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
访问失败,实际访问路径为:http://127.0.0.1:90/X-admin/X-adminadmin-add.html
结论:
当proxy_pass后面有斜杠时,则实际访问路径会将访问路径中和location中的相同的部分替换掉,比如说代理路径为http://127.0.0.1:8020/时,我们访问路径为:http://127.0.0.1:90/X-admin/admin-add.html,会将我们访问路径中的X-admin替换
掉,则生成的路径为:http://127.0.0.1:8020/admin-add.html。
当proxy_pass没有斜杠时,则实际访问路径为:代理路径+访问路径与location相同的部分路径。如果我们访问路径为:
http://127.0.0.1:90/X-admin/admin-add.html,代理路径为:http://127.0.0.1:8020/X-admin时,则实际路径为:
http://127.0.0.1:90/X-adminX-admin/admin-add.html