Docker de configuration Nginx proxy pass

Voici le problème:

La machine hôte dispose de plusieurs applications docker s’exécutant sur différents ports, par exemple. App1 @ 3001, App2 @ 3002 … 3100 etc.

Maintenant, je voudrais accéder aux applications dans ce format http://hostname.com/app1 , http://hostname.com/app2 ..

Pour ce faire, j’exécute nginx sur l’hôte pour les demandes de proxy vers le bon port en fonction du sous-uri

location = /app1 { proxy_redirect http://hostname:3001/; include /etc/nginx/proxy_params; } location ^~ /app1 { proxy_redirect http://hostname:3001/app1; include /etc/nginx/proxy_params; } 

Mais cela ne fonctionne pas lorsque le sous-site du site change ou si le site redirige. Par exemple:

 If I visit the site at hostname:3001 -> I can see the site If I visit the site at http://hostname.com/app1 -> I can see the site If the site page is at hostname:3001/static/index.html then when i access it as http://hostname.com/app1 the page changes to http://hostname.com/static/index.html -> I get 404. 

Y a-t-il un moyen de faire cela? Ou est-ce que la seule façon de le faire est de définir le DNS comme app1.hostname.com et de faire un routage basé sur le nom?

Dans votre server {} , vous souhaitez bloquer:

 location /app1 { rewrite ^/app1(.*) /$1 break; proxy_pass http://hostname:3001/; 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; } location /app2 { rewrite ^/app2(.*) /$1 break; proxy_pass http://hostname:3002/; 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; } 

La règle de réécriture transmettra l’uris correct aux ports

Vous pouvez faire en sorte que chaque application écoute sur un port distinct (par exemple, 3000 et 3001), puis configurez votre nginx comme suit (incluez-le dans le bloc de définition du server {} ):

  location /app1 { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; } location /app2 { proxy_pass http://localhost:3001; proxy_set_header X-Real-IP $remote_addr; }