2017-07-03 2 views
1

Mon Nginx n'est pas dans l'image du docker. Mon application est dans l'image du docker. Ils vivent tous deux sur le même serveur.Comment utiliser Nginx pour se connecter à mon application dans l'image Docker?

Je ne veux pas Nginx dans une image docker, car il me semble terriblement complexe à configurer. Mais mon application fonctionne dans un conteneur docker.

Comment configurer Nginx pour utiliser l'image de docker dans laquelle mon application s'exécute?

Voici mon fichier config Nginx:

server { 
     listen   80; 
     server_name my.domain.com; 
     return   301 https://$server_name$request_uri; 
} 

server { 
     listen   443 ssl; 
     server_name www.nicolasxu.space nicolasxu.space; 
     # add Strict-Transport-Security to prevent man in the middle attacks 
     add_header Strict-Transport-Security "max-age=31536000"; 


     ssl_certificate /root/.ssh/nicolasxu.space.cert; 
     ssl_certificate_key /root/nicolasxu.space.key; 
     [....] 
} 
+0

Nginx est-il un proxy inverse pour une application servie ici? Ou un serveur web classique? –

+0

@ FrançoisMaturel Proxy inverse, serveur non classique. Merci! –

Répondre

2

Pour facilement nginx d'installation (en hôte docker) comme proxy inverse devant une webapp dockerized vous pourriez juste --publish le port de votre webapp et acheminer le trafic à ce port:

  1. Exécuter votre conteneur docker avec l'argument --publish pour lier le port hôte avec le port webapp de conteneurs, par exemple avec un conteneur jenkins je ferais:

    docker run --publish 127.0.0.1:8080:8080 --name jenkins jenkins 
    

Ce port 8080 se fixe du conteneur au port 80 sur 127.0.0.1 de localhost de la machine hôte (ce qui évite le port 8080 à ouvrir à tout le monde si vous n'utilisez le pare-feu). Le Docker User Guide explique en détail comment manipuler les ports dans Docker.

  1. avant tout le trafic entrant comme reverse proxy au conteneur local votre port (8080 dans mon exemple)

    server { 
        ... 
    
        listen   443 ssl; 
        server_name www.nicolasxu.space nicolasxu.space; 
        ... 
    
        ssl_certificate ... 
    
        location/{ 
          # forward all the trafic to docker container's published port 
          proxy_pass http://localhost:8080; 
        } 
    } 
    

Réglage SSL sur nginx et le routage du trafic HTTP comme dockerized webapp est une bonne pratique et fonctionnera comme un charme.


Modifier

Pour un maximum de performances, vous pouvez également utiliser:

Lorsque vous utilisez --network=host, docker va charger le conteneur d'utiliser les hôtes pile réseau. Vous ne devrez pas --publish ports sur l'hôte car c'est la même pile réseau, et l'application web sera disponible sur son port natif.

+0

C'est beaucoup de nouvelles connaissances. Merci beaucoup! Laissez-moi essayer ça en premier! –