Pourquoi mon serveur Nginx reverse-proxy node.js + express est-il redirigé vers 0.0.0.0?

J’ai un serveur configuré pour héberger plusieurs applications node.js + express sur plusieurs domaines via une interface Ngnix. Tout fonctionne très bien, sauf lorsque les appels à redirect sont effectués depuis un itinéraire express:

res.redirect('/admin'); 

Ensuite, le navigateur client est redirigé vers http://0.0.0.0:8090

Il semble que ce soit un problème avec les en-têtes de redirection sortant d’Express, mais juste au cas où cela serait pertinent, voici le fichier nginx.conf pour le domaine en question:

 server { listen 0.0.0.0:80; server_name *.example.com; access_log /var/log/nginx_example_access.log; error_log /var/log/nginx_example_error.log debug; # proxy to node location / { proxy_pass http://0.0.0.0:8090/; proxy_redirect off; proxy_set_header Host $proxy_host; proxy_max_temp_file_size 0; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } 

Résolu J’ai eu un problème dans mon fichier de configuration nginx qui faisait que node / express recevait un mauvais en-tête de requête. Lorsqu’un chemin relatif est passé dans res.redirect , il extrait l’hôte de l’object req entrant et le place dans l’en-tête de réponse.

  proxy_set_header Host $proxy_host; 

aurait du être

  proxy_set_header Host $host; 

$proxy_host est l’adresse de l’hôte en amont 0.0.0.0:port

$host est l’en-tête de demande entrante Host example.com


METTRE À JOUR

Comme le souligne Louis Chasortingot dans les commentaires, les nouvelles versions de Nginx ont remplacé $host par $http_host , ce qui dans les versions précédentes renvoie example.com:port mais retourne maintenant example.com .