Lorsque nginx est configuré en tant que proxy inverse, peut-il réécrire l'en-tête de l'hôte sur le serveur en aval comme ProxyPreserveHost d'Apache?

Réponses:

11

Je pense avoir trouvé une solution au problème. L'envoi de l'hôte du serveur en aval est le comportement par défaut dans nginx, et je l'avais remplacé en utilisant la directive:

proxy_set_header Host $host;

Qui envoie l'hôte demandé par le navigateur au serveur en aval. Exactement l'opposé de ce que je voulais.

Ainsi, alors que nginx n'a pas d'équivalent à Apache ProxyPreserveHost, le même comportement peut être obtenu avec la proxy_set_headerdirective, et la solution de nginx est plus générale.

poussins
la source
Devrait l'être proxy_set_header Host $http_host;.
Rob
@Rob, $http_hostn'existe pas selon les documents Nginx: nginx.org/en/docs/varindex.html
Daniel Serodio
1
@DanielSerodio En fait, oui, il existe, au moins pour 99,99% des connexions. Consultez la documentation . Il en diffère également très subtilement $host.
Michael Hampton
@MichaelHampton Je me tiens corrigé, merci pour le lien
Daniel Serodio
1

Un exemple pratique:

  set $s3_bucket 'SOMEBUCKET.s3.amazonaws.com';

  location / {
        send_timeout 5m;
        proxy_read_timeout 240;
        proxy_send_timeout 240;
        proxy_connect_timeout 240;
        proxy_http_version 1.1;
        proxy_set_header Host $s3_bucket;
        proxy_set_header Authorization '';
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_ignore_headers "Set-Cookie";
        proxy_buffering off;
        proxy_intercept_errors on;
        proxy_redirect off;
        resolver 8.8.8.8;
        proxy_pass http://$s3_bucket;
        }
cod3fr3ak
la source
Ceci utilise nginx.
cod3fr3ak