NGINX mit „Serverpool“ als LB für VERSCHIEDENE DOMÄNEN auf denselben Apache-Servern?

NGINX mit „Serverpool“ als LB für VERSCHIEDENE DOMÄNEN auf denselben Apache-Servern?

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 VHostDateien 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 Hostden Header festlegen. Andernfalls greift Nginx auf die Standardeinstellung zurück proxy_set_header Host $proxy_host;, die in Ihrem Fall serverpoolfü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;
  }
}

verwandte Informationen