Tõnis Ojandu
Tõnis Ojandu

Reputation: 3746

Nginx Reverse Proxy Redirect Issues

I have been struggling with this for some time now. My reverse proxy install essentially looks like this:

global_nginx: http://192.168.115.200/client1/ => docker_nginx: http://localhost:8877/ => docker_app: http://app:8080/

Reverse proxy is working fine, but I have trouble when my app is sending redirects. Essentially the app itself is just a Spring MVC application that redirects as following:

@Controller
public class Ctrl {
    @RequestMapping(value = { "/" })
    public String redir() {
        return "redirect:home";
    }
}

The result is that when I browse 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/

This is the 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;
}

And this is my 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;
}

Upvotes: 2

Views: 10312

Answers (1)

Richard Smith
Richard Smith

Reputation: 49792

You need to add the /client1 prefix in your proxy_redirect directive.

Maybe:

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

You can have more than one proxy_redirect directive, if you need to match multiple conditions. See this document for details.

Upvotes: 1

Related Questions