web-dev-qa-db-fra.com

Nginx reverse proxy to backend running on localhost

[~ # ~] modifier [~ # ~] : Il s'avère que la configuration my ci-dessous fonctionne réellement. Auparavant, j'obtenais des redirections vers le port 36000, mais c'était à cause de certains paramètres de configuration sur mon application principale qui en étaient la cause.

Je ne suis pas tout à fait sûr, mais je pense que je souhaiterais peut-être configurer un proxy inverse à l'aide de nginx.

J'ai une application en cours d'exécution sur un serveur au port 36000. Par défaut, le port 36000 n'est pas accessible au public et mon intention est que nginx écoute une URL publique, dirige toute demande vers l'URL vers une application exécutée sur le port 36000. Pendant cette tout le processus, l'utilisateur ne doit pas savoir que sa demande est envoyée à une application exécutée sur le port 36000 de mon serveur.

Pour le dire plus concrètement, supposons que mon URL soit http://domain.somehost.com/

Lors de la visite http://domain.somehost.com/ , nginx doit récupérer la demande et la rediriger vers une application déjà en cours d'exécution sur le serveur sur le port 36000, l'application effectue un certain traitement et passe le réponse en retour. Le port 36000 n'est pas accessible au public et ne doit pas apparaître dans le cadre d'une URL.

J'ai essayé une configuration qui ressemble à:

server {
    listen 80;
    server_name domain.somehost.com
    location / {
        proxy_pass http://127.0.0.1:36000;
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

et l'inclure dans mon nginx.conf principal

Cependant, cela nécessite que je rende le port 36000 accessible au public, et j'essaie d'éviter cela. Le port 36000 apparaît également dans le cadre de l'URL transférée dans le navigateur Web.

Existe-t-il un moyen de faire la même chose, mais sans rendre le port 36000 accessible?

Je vous remercie.

16
yanhan

EDIT: La configuration ci-dessous provient d'une configuration nginx fonctionnelle, avec le nom d'hôte et le port modifiés.

Vous devez peut-être être en mesure de configurer le serveur écoutant sur le port 36000 en tant que serveur upstream (voir http://nginx.org/en/docs/http/ngx_http_upstream_module.html ) .

server {
        listen   80;
        server_name domain.somehost.com;

        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $Host;
                proxy_set_header X-NginX-Proxy true;
                proxy_pass http://localhost:36000/;
                proxy_redirect http://localhost:36000/ https://$server_name/;
        }
}
20
Intermernet