Este posibil să „conectați” diferite servicii web (expuse din diferite containere docker) într-un același server nginx?
Iată un exemplu simplu pentru a vă face o idee generală:
Server {
asculta 80;
asculta [::]:80;
client_max_body_size 10M;
set de caractere utf-8;
nume_server my.server.org;
access_log /var/log/nginx/reverse-access.log;
error_log /var/log/nginx/reverse-error.log;
Locație / {
include proxy_params;
proxy_pass http://127.0.0.1:8081/;
}
locație /static/ {
include proxy_params;
includ /etc/nginx/mime.types;
alias /var/www/app/static/;
}
locație ^~ /app2/ {
include proxy_params;
proxy_pass http://127.0.0.1:8082;
}
locație ^~ /app3/ {
include proxy_params;
proxy_redirect dezactivat;
proxy_set_header Gazdă $http_host;
proxy_pass http://127.0.0.1:8083;
}
}
Unde Locație /
este rădăcina unei prime aplicații împreună cu fișierele sale statice din următorul bloc de locație.
Această primă aplicație rulează la http://my.server.org/.
Aș dori să accesez alte două aplicații la http://my.server.org/app2/ și http://my.server.org/app3/ păstrând același nume de server my.server.org
.
Aceste aplicații sunt legate de cea principală, dar sunt total independente, adică sunt servite din alte compoziții docker, cu porturile expuse la 8082 și respectiv 8083.
Este posibil să se realizeze o sarcină atât de simplă într-un unic Server
bloc?
Pentru moment, am primit 404 când am ajuns la celelalte două adrese URL.
Practic, vreau să mapez acele URL-uri + porturi de lucru și toate elementele lor secundare către locații numite:
http://my.server.org:8081/.... -> http://my.server.org/...
http://my.server.org:8082/.... -> http://my.server.org/app2/....
http://my.server.org:8083/.... -> http://my.server.org/app3/....
EDITAȚI | ×:
fie asta:
locație /app3/ {
dacă ($http_referer ~ "^$scheme://$http_host/app3/") {
rescrie ^/app3/(.*) $scheme://$http_host/app3/$1 redirecționare;
}
include proxy_params;
proxy_redirect dezactivat;
proxy_set_header Gazdă $http_host;
proxy_pass http://127.0.0.1:8083;
}
sau asta:
locație ~*/app3/(.*)$ {
include proxy_params;
proxy_redirect dezactivat;
proxy_set_header Gazdă $http_host;
proxy_pass http://127.0.0.1:8083/$1;
}
„funcționează” la fel, dar nu perfect, deoarece au mai rămas două probleme:
- este difuzat numai HTML brut (de exemplu, fără stil: „502 gateway bad” pe fișierele CSS, de exemplu)
- link-urile din cadrul paginilor indică, de ex.
http://my.server.org/subfeature/subitem
în loc de http://my.server.org/app3/subfeature/subitem
. Prin urmare, le „lipsește”. /app3
prefix și nu știu cum să-l adaug dacă nu este prezent acolo unde ar trebui să fie de fapt.