How do I setup NGINX configuration to reverse prox

2019-05-14 18:59发布

I am working on setting up our development environment using Vagrant, Docker and NGINX (among other tools).

We have a common microservice architecture and we are using a container per microservice.

As a proof of concept, I am using two test microservices to try to work out the development environment, a and b.

We are running three containers (nginx,a,b) for the purpose of my proof of concept.

Using reverse proxies in NGINX, I want to be able to use the following proxies.

http://localhost:8181/a/ proxies request to the IP address of container 'a' http://localhost:8181/b/ proxies request to the IP address of container 'b'

To do this, I want to defer the management of each of the services nginx configuration to that service itself. Hopefully, this would allow each of the service to add/remove/modify entries to a /etc/nginx/sites-available volume that is shared with the containers and the host OS.

For example, I would think that I would need the following structure in NGINX

/etc/nginx
   - nginx.conf
   - sites-available
     - a
     - b
   - sites-enabled
     - a (sym link to sites-available/a)
     - b (sym link to sites-available/b)

The nginx.conf file looks like the following:

worker_processes  4;
events {
    worker_connections  1024;
}

http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Assuming that when I pull the IP addresses of the containers for a and b I get the following

a -> 172.17.0.1

b -> 172.17.0.2

and that I have container a exposing port 1234 and container b exposing port 5678, what should the a and b files look like under sites-available?

I tried the following and similar variations, but can't seem to get it to use BOTH /a and /b proxies.

excerpt from /etc/nginx/sites-available/a

server {
    listen 80;
    location /a/ {
            proxy_pass http://172.17.0.1:1234/;
    }
}

excerpt from /etc/nginx/sites-available/b

server {
    listen 80;
    location /b/ {
            proxy_pass http://172.17.0.2:5678/;
    }
}

For example, using this configuration the following would be the results

http://localhost:8181/a/ proxies to container 'a' just fine

http://localhost:8181/b/ gives a connection refused

0条回答
登录 后发表回答