Monday, February 22, 2016

Redirect nginx request to upstream server running on different port

The following server directives show how you can redirect an incoming request from nginx to an upstream server running on a different port. You can also rewrite the url before redirecting the request as shown in the second server directive below.  In the below server directives, the server is listening on port 8082 and redirecting to other server (test-server) listening on port 8989

Redirecting a request to an upstream server

server {
   listen        8082;

   location ~ /(.*) {
       proxy_pass  http://test-server:8989;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_redirect    off;
   }

}

Rewrite url and redirect request to upstream server

server {
   listen        8082;

   location ~ /(.*) {
# e.g server url /session/login can be re written as
# /test/resource/session/login
      rewrite ^/(.*)$ /test/resource/$1 break;

       proxy_pass  http://test-server:8989;
# the complete url will look like http://test-server:8989/test/resource/session/login

       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_redirect    off;
   }

}

Define an upstream server

You can also define an upstream and use it in proxy_pass -

    upstream test_server
    {
        server test-server:8989

    }

Now you can use the upstream name in proxy pass -

proxy_pass test_server;

No comments:

Post a Comment