Nginx 反向代理重定向问题
Nginx Reverse Proxy Redirect Issues
我已经为此苦苦挣扎了一段时间。我的反向代理安装基本上是这样的:
global_nginx: http://192.168.115.200/client1/ => docker_nginx: http://localhost:8877/ => docker_app: http://app:8080/
反向代理工作正常,但我的应用程序发送重定向时遇到问题。本质上,应用程序本身只是一个 Spring MVC 应用程序,重定向如下:
@Controller
public class Ctrl {
@RequestMapping(value = { "/" })
public String redir() {
return "redirect:home";
}
}
结果是当我浏览http://192.168.115.200/client1/ I am redirected to: http://192.168.115.200/home/ but should be redirected to http://192.168.115.200/client1/home/
这是 global_nginx 会议:
location /client1 {
proxy_pass http://localhost:8877/.;
proxy_redirect http://localhost:8877/ /;
port_in_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
这是我的 docker_nginx 配置文件:
location / {
proxy_pass http://app:8080/;
proxy_redirect http://app:8080/ /;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
您需要在 proxy_redirect
指令中添加 /client1
前缀。
也许:
proxy_redirect http://$host:8877/ /client1/;
如果您需要匹配多个条件,您可以有多个 proxy_redirect
指令。有关详细信息,请参阅 this document。
我已经为此苦苦挣扎了一段时间。我的反向代理安装基本上是这样的:
global_nginx: http://192.168.115.200/client1/ => docker_nginx: http://localhost:8877/ => docker_app: http://app:8080/
反向代理工作正常,但我的应用程序发送重定向时遇到问题。本质上,应用程序本身只是一个 Spring MVC 应用程序,重定向如下:
@Controller
public class Ctrl {
@RequestMapping(value = { "/" })
public String redir() {
return "redirect:home";
}
}
结果是当我浏览http://192.168.115.200/client1/ I am redirected to: http://192.168.115.200/home/ but should be redirected to http://192.168.115.200/client1/home/
这是 global_nginx 会议:
location /client1 {
proxy_pass http://localhost:8877/.;
proxy_redirect http://localhost:8877/ /;
port_in_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
这是我的 docker_nginx 配置文件:
location / {
proxy_pass http://app:8080/;
proxy_redirect http://app:8080/ /;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
您需要在 proxy_redirect
指令中添加 /client1
前缀。
也许:
proxy_redirect http://$host:8877/ /client1/;
如果您需要匹配多个条件,您可以有多个 proxy_redirect
指令。有关详细信息,请参阅 this document。