前言
Nginx 反向代理经常配,不过一直没搞清楚加/和不加/的区别,今天研究一下,做一下记录
URL 和 URI
要先搞清楚这两个概念:
URL 是完整的访问路径,包含 协议、域名(IP) 、端口、资源路径,比如:
URI 是去掉了协议、域名(IP)、端口之后剩下的东西。
比如上面的/index.html 就是 URI
所以 URI 是 URL 的一部分,URL 包含 URI
Nginx proxy_url
搞清楚了 URL 和 URI,我们再来看 proxy_url
一般有两种情况:proxy_url 带 uri 和不带 uri
举个例子:
http://127.0.0.1 不带uri
http://127.0.0.1:8080 不带uri
https://www.abc.com:9889 不带uri
http://127.0.0.1/ 带uri, 后面只有有/都算uri
其实很简单,就看 proxy_url 后面带不带/,只要带了,就是包含 uri
proxy_url 不带 uri 的情况
会完整的代理 location
举个例子:
server {
listen 80;
server_name www.baidu.com;
location /article/ {
proxy_pass http://127.0.0.1:8080;
}
}
访问 http://www.baidu.com/article/1.html 实际转发的路径是 http://127.0.0.1:8080/article/1.html
proxy_url 带 uri 的情况
使用 proxy_url 中的 uri 替换 location
举个例子:
server {
listen 80;
server_name www.baidu.com;
location /article/ {
proxy_pass http://127.0.0.1:8080/;
}
}
此时 proxy_pass的uri是/,所以当匹配的时候,使用/替换 /article/
访问 https://www.baidu.com/article/1.html 实际转发路径是 http://127.0.0.1:8080/1.html
location
location 中 也会出现 加/和不加/的情况,这个相对简单,主要涉及是否匹配的问题
举几个例子:
location /article {
proxy_pass http://127.0.0.1:8080;
#访问 http://localhost/article/1.html ==> http://127.0.0.1:8080/article/1.html
}
location /article/ {
#注意访问http://localhost/article 不会匹配,至少要包含/article/才行
proxy_pass http://127.0.0.1:8080;
# 访问http://localhost/article/1.html ==> 127.0.0.1:8080/article/1.html
}
location /article/ {
# 注意不会匹配localhost/article
proxy_pass http://127.0.0.1:8080/;
# 访问http://localhost/article/ ==> 127.0.0.1:8080/
# 访问:http://localhost/article/123 ==> 127.0.0.1:8080/123
}
location /article {
proxy_pass http://127.0.0.1:8080/;
# 访问http://localhost/article1.html ==> 127.0.0.1:8080/1.html
# 访问http://localhost/article/1.htl ==> 127.0.0.1:8080//1.html
}
第 1、2、3 种写法比较常见~
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于