Nginx reverse proxy root URI issue

9/9/2019

I have an application running in Kubernetes with the following topology:

Some-ingress-controller--> nginx reverse proxy -->dynamically generated services.

I have set the NGINX reverse proxy with the following test configuration

location /mysite1/ {
  proxy_set_header  Host $host;
  proxy_set_header  Referer $http_referer;
  proxy_set_header  X-Real-IP $remote_addr;
  proxy_set_header  X-Forwarded-Proto http;
  proxy_set_header  X-Forwarded-For $remote_addr;
  proxy_set_header  X-Forwarded-Host $remote_addr;
  proxy_pass http://myservice1.default.svc:9000/;
}

So far everything works fine - when I go to my website http://example.com/mysite1/ I see what I expect from the myservice1 application hosted at http://myservice1.default.svc:9000/. However, the application myservice1 issues requests to various internal (internal meaning they are part of the same container) resources on /get_resourceX. When the myservice1 application tries to access these resources they will be accessed at http://example.com/get_resourceX/ and not at http://example.com/mysite1/get_resourceX as they should - and that is my problem.

What could work is to simply reverse proxy all the relevant resource names as well. However, then I would need to do the same for http://example.com/mysite2, http://example.com/mysite3 etc. which is impractical since these are generated dynamically.

Another possible solution is to check the http Referrer header and see whether it originates from mysite1 - but that seems awfully hackish.

How can I easily have myservice1 requests issued to /get_resourceX served by itself? Is there a generic way to set the root path for the myservice1 application to myservice1?

-- user787267
kubernetes
nginx
openshift
reverse-proxy

0 Answers