Nu sunt un mare specialist în administrarea nginx, sunt doar un dezvoltator. Am două backend-uri care rulează în docker. Lasă-mă să le numesc
- backend1:8080
- backend2:8081
De asemenea, am Nginx care expune portul 443 cu certificatul Letsencrypt instalat. Configurația mea pentru Nginx este (variabila env FQDN este ceva de genul example.com)
backend în amonte1 {
server backend1:8080;
}
backend în amonte2 {
server backend2:8081;
}
Server {
asculta 443 ssl;
nume_server ${FQDN} www.${FQDN};
ssl_certificate /etc/letsencrypt/live/${FQDN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${FQDN}/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers activat;
if ($server_port = 80) { set $https_redirect 1; }
if ($gazdă ~ '^www\.') { setează $https_redirect 1; }
if ($https_redirect = 1) { return 301 https://${FQDN}$request_uri; }
locație /cale1/ {
proxy_pass http://backend1/;
proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
proxy_http_versiunea 1.1;
proxy_pass_header Set-Cookie;
cookie_pass_header proxy;
proxy_pass_header X-Forwarded-For;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy adevărat;
add_header X-Upstream $upstream_addr;
}
locație /cale2/ {
proxy_pass http://backend2/;
proxy_redirect ~^/(.*) $scheme://$http_host/path2/$1;
proxy_http_versiunea 1.1;
proxy_pass_header Set-Cookie;
cookie_pass_header proxy;
proxy_pass_header X-Forwarded-For;
proxy_set_header Actualizare $http_upgrade;
proxy_set_header Conexiune „upgrade”;
proxy_set_header Gazdă $http_host;
proxy_set_header X-Real-IP $adresă_la distanță;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy adevărat;
add_header X-Upstream $upstream_addr;
}
}
Vreau asta dacă cer https://exapmle.com/path1/
atunci Nginx ar trebui să meargă la http://backend1:8080/
și returnați-mi răspunsul de la acel server. Problema este că backend1 (precum și backend2) poate răspunde cu 302 și redirecționează către o cale de ex. /Autentificare
. Nginx îmi redirecționează browserul către https://exapmle.com/login
dar vreau să mă redirecționeze către https://exapmle.com/path1/login
Ați putea să mă ajutați, vă rog, și să indicați eroarea pe care am făcut-o în configurația mea. Am revizuit toate întrebările similare în SO și nu am găsit nicio soluție. De asemenea, am explorat documentația Nginx și, de asemenea, nu am găsit răspunsul.
Am linia proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
și presupun că trebuie să facă treaba pe care mi-o doresc.
BTW nu pot ocupa / locația (creați configurația pentru calea rădăcină) în configurația mea Nginx, deoarece este rezervată unui alt server backend.
Mulțumesc anticipat.