Je suis en train d'utiliser un serveur NGINX en tant que proxy ssl pour d'autres serveurs NGINX. Malheureusement, si une requête est redirigée par un serveur en amont, le champ de localisation contient le mauvais port de destination.
curl -v "https://example.com/site"
:
> GET /site HTTP/2
> Host: example.com
> User-Agent: curl/7.58.0
> Accept: */*
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 301
< serveur: nginx
< date: Sun, 18 Mar 2018 20:01:44 GMT
< type de contenu: text/html
< longueur du contenu: 178
< localisation: http://example.com:9101/site/
< strict-transport-security: max-age=15768000; includeSubDomains
Proxy NGINX:
# Proxy: example.com
####################
server {
listen 0.0.0.0:80;
listen [::]:80;
server_name example.com;
root /srv/www/_empty;
location / { return 301 https://example.com$request_uri; }
}
amont monamont {
server [::1]:9101;
}
server {
listen 0.0.0.0:443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /srv/www/_empty;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options "";
proxy_set_header X-Content-Type-Options "";
proxy_pass http://myupstream;
}
}
Serveur en amont NGINX:
# Site NGINX: example.com
#########################
server {
# Server
listen [::1]:9101;
server_name example.com;
# Root
root /srv/www/example.com/staging;
# Désactiver le cache
sendfile off;
# Jeu de caractères
charset utf-8;
# Défaut
location / {
index index.html;
try_files $uri $uri/ =404;
}
}
Les deux instances NGINX tournent en tant que processus maître séparés sur la même machine. Tout le reste fonctionne parfaitement.
Je pensais que le proxy NGINX réécrirait la réponse de l'amont de sorte qu'il convertit http://example.com:9001/site/
en https://example.com/site/
.
Qu'ai-je oublié?