Nginx proxy_pass

在Nginx中配置代理时,如果后端服务器地址以斜杠(/)结尾,而代理地址又以斜杠开头,则代理路径会自动加上后端服务器地址的路径。如果后端服务器地址没有以斜杠结尾,则代理路径会使用后端服务器地址,不会加上额外的斜杠。

以下是两种常见的配置示例:

后端服务器地址以斜杠结尾:

 

location /backend/ {
    proxy_pass http://backend-server/; # 以斜杠结尾
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在这个配置中,对于请求 /backend/some/path,实际代理到的URL将是 http://backend-server/some/path。

后端服务器地址不以斜杠结尾:

location /backend {
proxy_pass http://backend-server; # 不以斜杠结尾
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在这个配置中,对于请求 /backend/some/path,实际代理到的URL将是 http://backend-server/some/path。Nginx会自动将/backend的路径加到代理地址后面。

如果你需要在代理时忽略后端服务器地址的末尾斜杠,可以在代理地址中使用正则表达式和rewrite指令,如下所示:

location ~ ^/backend(?:/(.*)) {
proxy_pass http://backend-server$1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在这个配置中,rewrite指令会从请求的URI中去除/backend,然后将其传递给后端服务器。这样,无论后端服务器地址是以斜杠结尾还是不以斜杠结尾,代理路径都会正确地匹配。

 

 

1)proxy_pass最后有斜线时(即端口后只有斜线,例如A和B中的proxy_pass),location最后有斜线时,最终组成的url:proxy_pass + location最后一个斜线以后的部分
2)proxy_pass最后有斜线时(即端口后只有斜线,例如A和B中的proxy_pass),location最后无斜线时,最终组成的url:proxy_pass + 斜线 + location后面的所有部分(但不包含location后面的所有部分的第一个斜线) //其实就是比1多个斜线
3)proxy_pass最后无斜线时,location最后有斜线时,最终组成的url:proxy_pass + location + 请求url中location以后的所有部分(不包含第一个/)
4)proxy_pass最后无斜线时,location最后无斜线时,最终组成的url:proxy_pass + location + “/” + 请求url中location以后的所有部分(不包含第一个/)
5)proxy_pass最后有斜线时(且已经包含了至少一级目录,例如E和F中的proxy_pass),location 最后有斜线时,最终组成的url:proxy_pass + location以后的所有部分(但不包含第一个/)

6)proxy_pass最后有斜线时(且已经包含了至少一级目录,例如E和F中的proxy_pass),location最后无斜线时,最终组成的url:proxy_pass + “/” + location以后的所有部分(包含第一个/)

7)proxy_pass最后无斜线时(且包含了至少一级目录,例如G和H中的proxy_pass),location最后有斜线时,最终组成的url:proxy_pass + location以后的所有部分(不包含第一个/)

8)proxy_pass最后无斜线时(且包含了至少一级目录,例如G和H中的proxy_pass),location最后无斜线时,最终组成的url:proxy_pass + location以后的所有部分(包含第一个/)
示例:

nginx 服务器及端口 127.0.0.1:80

后端服务:127.0.0.1:8080

测试url:http://127.0.0.1:80/weijishu/api/abc

A.配置

nginx配置如下:

location /weijishu/ {
   proxy_pass http://127.0.0.1:8080/;
}
实际访问的端口服务:http://127.0.0.1:8080/api/abc

B.配置

location /weijishu {
   proxy_pass http://127.0.0.1:8080/;
}
实际访问的端口服务:http://127.0.0.1:8080//api/abc

C.配置

location /weijishu/ {
   proxy_pass http://127.0.0.1:8080;
}
实际访问的端口服务:http://127.0.0.1:8080/weijishu/api/abc

D.配置

location /weijishu {
   proxy_pass http://127.0.0.1:8080;
}
实际访问的端口服务:http://127.0.0.1:8080/weijishu/api/abc

E.配置

location /weijishu/ {
   proxy_pass http://127.0.0.1:8080/server/;
}
实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

F.配置

location /weijishu {
   proxy_pass http://127.0.0.1:8080/server/;
}
实际访问的端口服务:http://127.0.0.1:8080/server//api/abc

G.配置

location /weijishu/ {
   proxy_pass http://127.0.0.1:8080/server;
}
实际访问的端口服务:http://127.0.0.1:8080/serverapi/abc

H.配置

location /weijishu {
   proxy_pass http://127.0.0.1:8080/server;
}
实际访问的端口服务:http://127.0.0.1:8080/server/api/abc

 


已有 0 条评论

    欢迎您,新朋友,感谢参与互动!