Docker Nginx Proxy: how to route traffic to another container using a path rather than a host name

lets say that now I have another application running on one server on a different path:

  • 10.200.200.210/ app1
  • 10.200.200.210/ app2
  • 10.200.200.210/ app3

I want to run each application in a different Docker container using nginx as a proxy.

I tried jwilder / nginx-proxy and it works fine if I use different domain names (app1.domain.com, app2.domain.com, etc.), but I cannot use domains, I need to use the same IP address

Also I can not use different ports, for example:

  • 10.200.200.210:81/ app1
  • 10.200.200.210:82/ app2
  • 10.200.200.210:83/ app3

all should work on port 80.

  • Is there a way to configure jwilder / nginx-proxy for this?
  • There is another Docker image, for example jwilder / nginx-proxy .
  • or pls could you give me some hint on creating a nginx docker-docker container?
+12
source share
4 answers

In case someone is still looking for an answer. jwilder / nginx-proxy allows you to use the custom Nginx configuration for both the entire proxy and per VIRTUAL_HOST.

Here's how you can do this using the Per-VIRTUAL_HOST location configuration.

  1. Inside your project folder, create another folder - "vhost.d".
  2. Create a file "whoami.local" with the user configuration nginx inside the folder "vhost.d". This file must have the same name as VIRTUAL_HOST!

./vhost.d/whoami.local

location /app1 { proxy_pass http://app1:8000; } location /app2 { proxy_pass http://app2:8000; } 
  1. Create a docker-compose.yml file.

./docker-compose.yml

 version: '3' services: nginx-proxy: image: jwilder/nginx-proxy ports: - "8080:80" volumes: - /var/run/docker.sock:/tmp/docker.sock:ro - /path/to/vhost.d:/etc/nginx/vhost.d:ro gateway: image: jwilder/whoami environment: - VIRTUAL_HOST=whoami.local app1: image: jwilder/whoami app2: image: jwilder/whoami 
  1. Run docker-compose up
  2. Check configuration

In bash run:

 $ curl -H "Host: whoami.local" localhost:8080 I'm 1ae273bce7a4 $ curl -H "Host: whoami.local" localhost:8080/app1 I'm 52b1a7b1992a $ curl -H "Host: whoami.local" localhost:8080/app2 I'm 4adbd3f9e7a0 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a659a4d4b0a jwilder/nginx-proxy "/app/docker-entrypo…" 54 seconds ago Up 53 seconds 0.0.0.0:8080->80/tcp nginxreverseproxy_nginx-proxy_1 4adbd3f9e7a0 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app2_1 52b1a7b1992a jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_app1_1 1ae273bce7a4 jwilder/whoami "/app/http" 54 seconds ago Up 53 seconds 8000/tcp nginxreverseproxy_gateway_1 

You can also add the "whoami.local" domain to the / etc / hosts file and directly call this domain.

/ etc / hosts

 ... 127.0.0.1 whoami.local ... 

Result:

 $ curl whoami.local:8080 I'm 52ed6da1e86c $ curl whoami.local:8080/app1 I'm 4116f51020da $ curl whoami.local:8080/app2 I'm c4db24012582 
+7
source

Just use nginx to create the container **, do not forget to set net "host" **, which will make your container resource the same address and port with the host machine.mount nginx.conf file and configuration proxy table. For instance:

docker command:

 docker run --name http-proxy -v /host/nginx.conf:/etc/nginx/nginx.conf --net host -itd --restart always nginx 

nginx.conf:

 server { listen 80; location /app1 { proxy_pass YOUR_APP1_URL; } location /app2 { proxy_pass YOUR_APP2_URL; } } 
+1
source

Here is the full nginx.conf

It redirects everything to root, and only /api to another container.

Source code and sample container using it

 user nginx; worker_processes 1; error_log /var/log/nginx/error.log; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://frontend:3000/; } location /api { proxy_pass http://backend/api; } } } 
0
source

just put this in /etc/nginx/nginx.conf

  worker_processes 1; error_log /var/log/nginx/error.log; events { worker_connections 1024; } http { server { listen 80; location /api { proxy_pass http://awesome-api; proxy_redirect off; 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-Host $server_name; } } } 
0
source

All Articles