web-dev-qa-db-fra.com

Docker nginx plusieurs applications sur un hôte

Je suis confus par la façon dont je dois gérer le proxy inverse (nginx) avec plusieurs webapps indépendantes sur le même hôte. Je sais que je peux utiliser https://github.com/jwilder/nginx-proxy et configurer VIRTUAL_Host par application, mais je ne pourrai pas voir nginx visible en tant que service dans chaque application docker-compose .yml.

Je veux le faire de cette façon parce que je veux définir clairement tous les services nécessaires pour exécuter l'application en production et la reproduire facilement en développement.

En d'autres termes: j'ai deux applications Web que je dois exécuter sur le même hôte et je veux définir nginx comme une dépendance de service dans docker-compose.yml dans les deux applications, mais partager ce service avec les deux car un seul nginx peut transférer le port 80 .

10
Axon

Dockerfile:

FROM ubuntu:14.04
MAINTAINER Test ([email protected])
# install nginx
RUN apt-get update -y
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:nginx/stable
RUN apt-get update -y
RUN apt-get install -y nginx
# deamon mode off
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
# volume
VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/var/log/nginx"]
# expose ports
EXPOSE 80 443
# add nginx conf
ADD nginx.conf /etc/nginx/conf.d/default.conf
WORKDIR /etc/nginx
CMD ["nginx"]

nginx.conf:

server {
    listen          80;
    server_name     test1.com www.test1.com;
    location / {
        proxy_pass  http://web1:81/;
    }
}
server {
    listen          80;
    server_name     test2.com www.test2.com;
    location / {
        proxy_pass  http://web1:82/;
    }
}

** web1 et web2 - noms des conteneurs

docker-compose.yml:

version: "2"
services:
    web1:
        image: your_image
        container_name: web1
        ports:
            - 81:80
    web2:
        image: your_image
        container_name: web2
        ports:
            - 82:80
    nginx:
        build: .
        container_name: nginx
        ports:
            - 80:80
            - 443:443
        links:
            - web1
            - web2

Comment exécuter:

docker-compose up -d

Lorsque vous appelez test1.com - nginx transfère votre demande au conteneur web1: 81, lorsque test2.com - au conteneur web2: 82

P.S .: votre question portait sur NGINX-reverse-proxy. Mais c'est mieux et plus facile avec TRAEFIK https://traefik.io

6
Oleh Vasylyev