nginx location URI /
location & proxy_pass 后面的 /
-
location 中的字符有没有
/
都没有影响。也就是说/user/
和/user
是一样的 -
如果 URI 结构是
https://domain.com/
的形式,尾部有没有/
都不会造成重定向。因为浏览器在发起请求的时候,默认加上了/
-
如果 URI 的结构是
https://domain.com/some-dir/
。尾部如果缺少/
将导致重定向。因为根据约定,URL 尾部的/
表示目录,没有/
表示文件。所以访问/some-dir/
时,服务器会自动去该目录下找对应的默认文件。如果访问/some-dir
的话,服务器会先去找some-dir
文件,找不到的话会将some-dir
当成目录,重定向到/some-dir/
,去该目录下找默认文件。可以去测试一下你的网站是不是这样的
实际案例
-
location和proxy_pass都带/,则请求的真实地址不带location的URI
location /api/ { proxy_pass http://127.0.0.1:8080/; }
www.test.com/api/upload-->http://127.0.0.1:8080/upload
-
location不带/,proxy_pass带/,则真实地址会带/
location /api { proxy_pass http://127.0.0.1:8080/; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080//upload
-
location带/,proxy_pass不带/,则真实地址会带location匹配目录/api/
location /api/ { proxy_pass http://127.0.0.1:8080; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/api/upload
-
location和proxy_pass都不带/,则真实地址会带location匹配目录/api/
location /api { proxy_pass http://127.0.0.1:8080; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/api/upload
-
location与proxy_pass后面的URI都带/
location /api/ { proxy_pass http://127.0.0.1:8080/server/; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/server/upload
-
location带地址但不带/,proxy_pass带地址加/
location /api { proxy_pass http://127.0.0.1:8080/server/; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/server//upload
-
location带地址加/,proxy_pass带地址不加/
location /api/ { proxy_pass http://127.0.0.1:8080/server; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/serverupload
-
location与proxy_pass带地址都不带/
location /api { proxy_pass http://127.0.0.1:8080/server; }
访问地址: www.test.com/api/upload-->http://127.0.0.1:8080/server/upload
参考文献