Reindirizzamento proxy inverso Nginx


14

Sto usando nginxcome proxy inverso e quando accedo alla mia interfaccia web vengo reindirizzato all'URL proxy. Vorrei evitarlo e mantenere sempre "nome_server" come URL. È possibile?

Questo è il mio /etc/nginx/conf.d/my_app.conf:

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 

Mi collego http://my-app.net, inserisco le informazioni di accesso, quindi sono reindirizzato alla http://ip_of_the_app:7180stessa pagina di accesso e devo accedere di nuovo. Questo doppio accesso può essere evitato?


tonio94, il tuo problema è stato risolto? in caso affermativo, si prega di accettare la risposta. in caso contrario, chiarire cosa manca.
CNST

2
L'ho appena testato ieri, funziona, è necessario rimuovere proxy_redirect. Grazie per l'aiuto.
tonio94,

Risposte:


26

Non impostare proxy_redirectsu off, che non sta facendo quello che pensi che stia facendo. proxy_redirectesegue qualcosa di simile alla riscrittura degli URL, ad esempio:

location /sales/ { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/; 
}

Ciò ti consente di ospitare il /sales/percorso altrove. Ma anche allora, i parametri predefiniti proxy_redirectfanno esattamente questo per te gratuitamente. L'impostazione predefinita è reindirizzare la posizione in qualunque cosa sia presente proxy_pass(ei parametri predefiniti vengono utilizzati quando non si imposta proxy_redirectaffatto o si utilizza proxy_redirect default;).

Non è necessario impostare proxy_redirect.


Quello che ti manca sono le intestazioni che devono essere inviate all'app. Il più importante è HOST. Ciò eseguirà il proxy come desiderato e manterrà l'URL corretto nel browser.

location / { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_set_header HOST $host;
}

Nota che l'app http://ip_of_the_app:7180/ora riceverà la richiesta con l' Host: my-app.netintestazione.


Dovresti anche considerare di usare un paio di intestazioni in più:

proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

Ciò consentirà una migliore registrazione all'interno dell'app su http://ip_of_the_app:7180/. X-Forwarded-Forfornire l'IP del client effettivo (anziché nginxIP) e X-Forwarded-Protoverificare se il client si è connesso nginxtramite HTTP o HTTPS.


Grazie per l'aiuto. proxy_redirect non è necessario ma proxy_set_header Referente ip_of_the_app: 7180 deve essere impostato per funzionare correttamente.
tonio94,

@ tonio94 - Grazie, ho aggiornato la risposta. Si noti che l'uso normale di Refererè semplicemente quello $http_refererche lo copia dalla richiesta. Ciò non funziona se la richiesta non ha un'intestazione Referer, pertanto in alcuni casi è difficile codificarla.
grochmal

@JonathanKomar - Grazie per quello, hai ragione, ora modificato. Mi dispiace aver impiegato un po 'di tempo per notare il tuo commento.
grochmal

@grochmal Grazie, mi hai sostanzialmente salvato la vita con queste informazioni su: proxy_set_header HOST $ host;
Obay Abd-Algader
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.