Ich habe nginx als LB. Und die 2 Apaches als Webserver. Nehmen wir an, ich habe unterschiedliche Domänen:
- www.beispiel.com
- Kasse.Beispiel.com
Beide Domänen befinden sich auf denselben beiden Apache-Servern. Aber natürlich in unterschiedlichen Verzeichnissen. Und mit unterschiedlichen VHost
Dateien in der Apache-Vhost-Datei.
Etwa so wie das folgende Design:
Nginx
|
-------------
| |
Apache Apache
Unten ist meine aktuell vorhandene Nginx .conf-Datei, die für die zweite Domäne (checkout.example.com) nicht funktioniert.
Von NGINX (mysites.conf):
upstream serverpool {
server 1.2.3.101:80 weight=1;
server 1.2.3.102:80 weight=1;
}
server {
listen 80;
server_name www.example.com checkout.example.com;
location / {
proxy_pass http://serverpool;
}
}
Von beiden Apache-ServernDasselbeVhost-Dateien (httpd.conf):
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/html/www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName checkout.example.com
DocumentRoot /var/www/html/checkout.example.com/
</VirtualHost>
Aber immer wenn ich das durchsuche (http://checkout.example.com), DieDie Domain wird immer noch angezeigtim Browser ..aber mit dem Inhalt von (www.example.com), was völlig falsch ist.
Was habe ich bitte falsch gemacht?
Antwort1
Sie sollten fast immer Host
den Header festlegen. Andernfalls greift Nginx auf die Standardeinstellung zurück proxy_set_header Host $proxy_host;
, die in Ihrem Fall serverpool
für Apache nutzlos wäre.
Sehenhttp://nginx.org/r/proxy_set_headerUndhttp://nginx.org/r/proxy_passfür Details.
upstream serverpool {
server 1.2.3.101:80 weight=1;
server 1.2.3.102:80 weight=1;
}
server {
listen 80;
server_name www.example.com checkout.example.com;
location / {
proxy_pass http://serverpool;
proxy_set_header Host $host;
}
}
Antwort2
Sie müssen auch den HOST:-Header an die IPs Ihres Upstream-Servers senden
Dieser Artikel beantwortet die Frage vollständig
Sorgen Sie dafür, dass nginx beim Reverseproxying den Hostnamen des Upstreams übergibt
auch Ihre Nginx-Konfiguration sollte so aussehen
upstream serverpool {
server 1.2.3.101:80 weight=1;
server 1.2.3.102:80 weight=1;
}
server {
listen 80;
server_name www.example.com checkout.example.com;
location / {
proxy_pass http://serverpool;
proxy_set_header Host $host;
}
}