Nginx反向代理重定向问题

时间:2016-01-20 12:52:48

标签: redirect nginx proxy reverse-proxy http-proxy

我一直在努力解决这个问题。我的反向代理安装基本上是这样的:

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/时,我被重定向到:http://192.168.115.200/home/但应重定向到http://192.168.115.200/client1/home/

这是global_nginx conf:

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 conf:

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;
}

1 个答案:

答案 0 :(得分:1)

您需要在/client1指令中添加proxy_redirect前缀。

也许:

proxy_redirect http://$host:8877/ /client1/;

如果您需要匹配多个条件,则可以有多个proxy_redirect指令。有关详细信息,请参阅this document