web-dev-qa-db-fra.com

Nginx ne redirige pas, pas proxy

Je souhaite configurer Nginx en tant que proxy inverse pour un service https, car nous avons un cas d'utilisation spécial où nous devons "annuler le https" une connexion:

http://nginx_server:8080/myserver ==> https://mysecureservice

Mais ce qui se passe, c'est que le service https réel n'est pas mandaté. Nginx me redirige vers le service réel, donc l'URL dans le navigateur change. Je veux interagir avec Nginx car c'était le service réel, juste sans https.

Voici ce que j'ai:

server {
    listen 0.0.0.0:8080 default_server;
    location /myserver {
        proxy_pass https://myserver/;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $Host;
    }
}
20
mitchkman

Vous devez utiliser le proxy_redirect pour gérer la redirection.

 Sets the text that should be changed in the “Location” and “Refresh” header fields of a 
 proxied server response. Suppose a proxied server returned the header field 
 “Location:https://myserver/uri/”. The directive
 will rewrite this string to “Location: http://nginx_server:8080/uri/”. 

Exemple:

 proxy_redirect https://myserver/ http://nginx_server:8080/;

Source: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

16
Tan Hong Tat

Vous pouvez configurer nginx comme ceci si vous ne voulez pas que le serveur fasse des redirections:

server
{
    listen 80;
    server_name YOUR.OWN.DOMAIN.URL;
    location / {
        proxy_pass http://THE.SITE.URL.YOU.WANT.TO.DELEGAGE/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
3
warch