By Christopher Francisco


2018-12-14 21:29:22 8 Comments

I have an Nginx reverse proxy inside a docker container, which listens to port 3000 and is exposed to 3002: docker run -p "3002:3000" ....

The idea is that this reverse proxy will proxy /my-app to the instance running in my laptop on port 8080; and /my-app/api to the cloud instance, in https://my-domain.

Here's the configuration:

upstream my-laptop {
  server host.docker.internal:8080; # this is a magic hostname for the laptop's IP address.
  keepalive 64;
}

upstream cloud {
  server my-domain.com:443;
  keepalive 64;
}

server {
    listen       3000;

    include ssl/ssl-certs.conf;
    include ssl/ssl-params.conf;

    location /my-app {
        proxy_pass http://my-laptop;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /my-app/api {
        proxy_pass https://cloud;
        proxy_set_header Host            $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    ...
}

The issues are:

  1. when I hit https://localhost:3002/my-app I get a 301 response to /my-app/ (trailing slash). I don't know why is that. The local app instance is shown in the browser, so I guess I can let it slide for the moment?
  2. when I hit https://localhost:3002/my-app/api/students, I get a 301 response to https://cloud/my-app/api/students. This causes CORS issues, of course, and the endpoint doesn't return data.

Now, I have configured reverse proxies a couple of times, so I am completely shocked that I'm not seeing what's wrong, this is not my first time.

I have tried tweaking with the upstreams, the proxy_set_headers, compared with another reverse proxy that I have for a different app; I'm out of ideas.

What am I doing wrong?

2 comments

@Christopher Francisco 2018-12-19 14:35:02

The problem was my Host header in the cloud upstream, I had

proxy_set_header Host $http_host;

But it needed to be

proxy_set_header Host my-domain.com;

@mhndev 2018-12-15 00:32:46

here is an example config for nginx as a reverse proxy which works for me, I simplified it and removed unnecessary parts. I hope it helps.

upstream OAUTH {
    server remote_oauth;
}



server {
    listen  80;
    server_name example.com;

    client_header_timeout       300;


    location = /servies/oauth {
      return 301 /services/oauth/;
    }


    location /services/oauth/ {
        proxy_pass_request_headers on;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://OAUTH/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-ROOT-URI /services/oauth;
        proxy_set_header Accept-Encoding "gzip";
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_http_version 1.1;
        proxy_intercept_errors on;
        proxy_redirect default;
        client_max_body_size 4M;
    }


}

I thinks you missed this part : proxy_pass_request_headers on

Related Questions

Sponsored Content

21 Answered Questions

[SOLVED] Difference between proxy server and reverse proxy server

2 Answered Questions

Keycloak Redirect url with nginx is going to http rather than https

  • 2018-04-03 12:02:15
  • Atulya Nair
  • 957 View
  • 3 Score
  • 2 Answer
  • Tags:   nginx jboss

2 Answered Questions

2 Answered Questions

[SOLVED] Express - req.ip returns 127.0.0.1

0 Answered Questions

NGINX as a WebSocket Proxy with Docker

2 Answered Questions

How to point many paths to proxy server in nginx

1 Answered Questions

[SOLVED] Difference HTTP Redirect vs Reverse Proxy in NGINX

1 Answered Questions

[SOLVED] Simple reverse proxy with Nginx (equivalent to Apache)

  • 2015-10-25 01:54:36
  • prosseek
  • 2646 View
  • 1 Score
  • 1 Answer
  • Tags:   apache nginx proxy

1 Answered Questions

[SOLVED] Ngnix Jsession changed redirection issue

  • 2015-06-30 11:09:34
  • Crazy Developer
  • 403 View
  • 2 Score
  • 1 Answer
  • Tags:   nginx

0 Answered Questions

nginx multiple ports for reverse proxies

Sponsored Content