lets say that now I have different app running on the same server on different path:
I want to run each app on a different Docker container using nginx as a proxy.
I tried jwilder/nginx-proxy and works great if I use different domain names (app1.domain.com, app2.domain.com, etc), but I'm not able to use domains, I need to use the same IP.
also I can't use different ports like:
all must work on port 80.
First, you need to expose the Nginx container to the internet. Kubernetes will create a service with an external load balancer with a public IP address. You can view your service by executing the following command. Now, you will get the external IP address of the Nginx cluster.
Create a new, detached Nginx container with this command: sudo docker run --name docker-nginx -p 80:80 -d nginx.
In case if somebody is still looking for the answer. jwilder/nginx-proxy allows you to use custom Nginx configuration either a proxy-wide or per-VIRTUAL_HOST basis.
Here's how can you do it with Per-VIRTUAL_HOST location configuration.
./vhost.d/whoami.local
location /app1 { proxy_pass http://app1:8000; } location /app2 { proxy_pass http://app2:8000; }
./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
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 "whoami.local" domain to /etc/hosts file and make calls to this domain directly.
/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
Just use nginx image to create container,**do remember set net "host" **which will make your container share same address and port with host machine.mount nginx.conf
file and config proxy table.for example:
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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With