web-dev-qa-db-fra.com

Nginx: quand utiliser proxy_set_header Host $ Host vs $ proxy_host

J'ai lu sur le proxy inverse et je me demande quand proxy_set_header Host $Host est approprié sur proxy_set_header Host $proxy_Host. J'ai fait quelques recherches et dans cet article il est dit que dans la plupart des cas, nous avons défini Host sur $ Host. Alors pourquoi nginx utilise-t-il par défaut $ proxy_host? Pour m'aider à comprendre plus concrètement, la configuration du proxy inverse ici (bas de l'article) fonctionnera-t-elle toujours si nous utilisons $ proxy_Host à la place?

Merci

11
Alex H

En général, il n'est pas nécessaire de faire explicitement proxy_set_header Host proxy_Host car c'est la valeur par défaut. Si vous devez appeler un serveur par quelque chose autre que ce qui est dans le proxy_pass directive, vous devrez alors remplacer via proxy_set_header something.

Si vous souhaitez proxy l'hôte identique tel qu'il était dans votre server_name directive, vous auriez alors l'occasion d'utiliser proxy_set_header $Host. Ce serait généralement le cas si l'application réelle est peut-être hébergée sur un autre port ou sur un serveur interne.

server {
    listen 80;
    server_name site.example.com;

    location / {
       proxy_set_header Host $Host;
       proxy_pass http://localhost:8080;
    }
}

Si le nom que vous appelez en amont n'est pas son nom DNS réel, vous pourriez avoir quelque chose comme:

# 192.168.2.1 responds to site.example.com, but
# site.example.com doesn't actually resolve to 192.168.2.1
proxy_pass http://192.168.2.1;
proxy_set_header Host site.example.com;

Un autre cas peut être pour l'hébergement virtuel "basé sur le nom" où il existe un nom DNS utile pour l'amont, mais vous souhaitez l'appeler par un autre nom.

proxy_pass http://Origin.example.com;
proxy_set_header Host site.example.com
17
Joshua DeWald