NGINX double proxy inverse

J'ai des problèmes étranges avec mon proxy inverse.

Mon configuration ressemble à ceci: configuration

Maintenant, les hôtes à l'intérieur de mon réseau interne peuvent accéder à l'application exécutée sur localhost:3000 sur le server srv1.my.domain.org , donc je sais que la configuration fonctionne. Mais dès que j'essaie d'accéder à l'application de l'extérieur du réseau (over gateway.my.domain.org ), je viens juste de voir la page de test NGINX. Je ne comprends pas pourquoi, depuis cette configuration, j'ai fait pour plusieurs autres applications, et elles fonctionnent.

REMARQUE: le server_name est identique au nom d'hôte du server physique.

Voici les configurations:

gateway.my.domain.org

path d'access: /etc/nginx/conf.d/app.my.domain.org.conf

 upstream srv { server srv1.my.domain.org; } server { listn 443; server_name gateway.my.domain.org; ssl on; ssl_certificatee /.../fullchain.pem; ssl_certificatee_key /.../privkey.pem; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; ssl_prefer_server_ciphers on; access_log /var/log/nginx/gateway.access.log; error_log /var/log/nginx/gateway.error.log; client_max_body_size 150M; location / { proxy_set_header Host $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_pass http://srv; proxy_read_timeout 90; } } 

srv1.my.domain.org

path: /etc/nginx/sites-enabled/app

 server { listn 80; server_name srv1.my.domain.org; location / { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:3000; } } 

One Solution collect form web for “NGINX double proxy inverse”

Ma configuration pour une configuration similaire est un peu différente:

 upstream app_backend { server 127.0.0.1:3000 ; } server { listn 443 ssl http2; listn [::]:443 ssl http2; server_name HOSTNAME; location / { try_files $uri $uri/ @app; } location @app { #proxy_cache general_cache; proxy_pass http://app_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 http; proxy_redirect off; } } 

Dans mon cas, j'ai tout sur un noeud, mais l'adaptation à votre cas devrait être une simple question de création de blocs similaires

Vous êtes également surpasser le X-Real-IP sur srv1.my.domain.org, que je ne suis pas sûr de vouloir faire.

Modifié pour tenir count des mises à jour dans les commentaires:

D'accord – je viens juste de constater que j'avais manqué quelque chose (ou que je n'avais pas réussi à le comptabiliser), ce qui correspond à la chose X-Real-IP.

Je pense que vous pourriez avoir un problème en partie parce que sur gateway.my.domain.org, vous avez:

proxy_set_header Host $host;

Et sur gateway.my.domain.org, $host = gateway.my.domain.org .

Donc, vous envoyez une request à srv1.my.domain.org (à partir de la passerelle), qui a un hôte: en-tête de gateway.my.domain.org. Votre vhost sur srv1 est configuré pour répondre à un en-tête Host de srv1.my.domain.org – et donc votre configuration vhost n'est pas utilisée. Le 404 provient probablement du server port 80 par défaut de srv1.

Une façon de résoudre ceci pourrait être:

proxy_set_header Host $proxy_host;

Ce qui correspond également à la valeur par défaut du champ Host (par https://nginx.org/fr/docs/http/ngx_http_proxy_module.html#proxy_set_header ).

Cela devrait être assez simple pour tester: configurer la journalisation pour srv1.my.domain.org pour accéder à une autre destination que les files journaux nginx par défaut. Ensuite, vérifiez si la prochaine request que vous faites s'affiche dans votre journal «personnalisé» ou par défaut.

Le problème avec X-Real-IP est que sur gateway.my.domain.org, $ remote_addr est significatif, mais sur srv1.my.domain.org, $ remote_addr est l'adresse interne de gateway.my.domain.org.

  • Redirection de port SSL Apache (8443 à 443)
  • Exécuter nginx comme proxy inverse avec apache
  • Puis-je supprimer en toute security l'en-tête via http?
  • Comment gérer le DNS sur le pare-feu
  • Routage NAT basé sur le nom DNS (proxy TCP inversé?)
  • Le choix du matériel et les limitations de bande passante sur le proxy inverse NGINX sur un VPS?
  • Transformez complètement les applications Web multiples sur une seule adresse
  • Nginx - Reverse proxy sur IIS6 avec auth
  • Certaines configurations de proxy inverse nginx cessent de fonctionner une fois par jour
  • Comment diagnostiquer ne fonctionne pas Reverse Proxy Server dans Apache
  • Est-il utile d'installer HTTP 2 reverse proxy en face du server HTTP 1?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.