J'ai un site qui fonctionne comme équilibreur de charge. Site A.
J'ai d'autres sites qui ne peuvent avoir qu'un seul domaine. Donc, si je redirige vers eux, le nom d'hôte est introuvable.
Donc, si j'ai défini manuellement l'en-tête sur quelque chose, seul ce site apparaît.
Comment puis-je définir l' proxy_set_header Host xxxx
adresse du serveur choisie. De cette façon, chaque demande de reroutage aura un en-tête d'hôte différent et approprié.
Ce ne sera pas un problème si mes 2 autres sites peuvent fonctionner en fonction de l'URL et non de l'en-tête de l'hôte.
worker_processes 1;
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
error_log logs/error.log debug;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream myapp1 {
#server localhost:3333;
server www.asd.com:80;
}
server {
listen 80;
location / {
proxy_set_header Host $upstream_addr; // should become somehow www.asd.com right now this code doesn't work
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://myapp1;
}
}
}
$server_addr
est en quelque sorte 127.0.0.1 pourquoi ??www.asd.com:80
est choisiif(server1) than host = a;
,if(server2) than host = b;
Réponses:
Vous devez définir l'en-tête sur la variable hôte entrante, comme indiqué ici :
la source
This variable is equal to line Host in *the header of request* or name
ce qui signifie ce que le client / navigateur dit, c'est celui qui est choisi.Les réponses à cette question expliquent ce comportement et proposent des solutions de contournement .
Essentiellement, l'en-tête est fixé bien avant la sélection de l'amont. Si vous ne pouvez pas faire en sorte que tous les amonts répondent à un seul en-tête Host:, vous devez corriger l'amont en même temps que vous définissez l'en-tête.
la source