GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie Nginx als Loadbalancer für Apache oder Tomcat für HTTP/HTTPS ein

Sie können Nginx als Loadbalancer vor Ihrer Webanwendung verwenden.

Wenn Ihre Unternehmensanwendung beispielsweise auf Apache (oder Tomcat) ausgeführt wird, können Sie eine zweite Instanz Ihrer Unternehmensanwendung auf Apache (oder Tomcat) auf einem anderen Server einrichten.

Und dann können Sie Nginx an das Front-End stellen, das den Lastausgleich zwischen den beiden Apache- (oder Tomcat- oder JBoss-) Servern übernimmt.

Wenn Sie neu bei Nginx sind, ist es wichtig, den Unterschied zwischen Nginx und Apache und der Nginx-Architektur zu verstehen.

Nginx unterstützt die folgenden drei Arten des Lastenausgleichs:

  1. Round-Robin – Dies ist der Standardtyp für Nginx, das den typischen Round-Robin-Algorithmus verwendet, um zu entscheiden, wohin die eingehende Anfrage gesendet werden soll
  2. am wenigsten verbunden – Wie der Name schon sagt, wird die eingehende Anfrage an den Server mit der geringeren Anzahl an Verbindungen gesendet.
  3. ip-hash – Dies ist hilfreich, wenn Sie eine Persistenz oder Stick-Verbindung der eingehenden Anfrage haben möchten. Bei diesem Typ wird die IP-Adresse des Clients verwendet, um zu entscheiden, an welchen Server die Anfrage gesendet werden soll.

1. Definieren Sie Upstream und Proxy_Pass in der Nginx-Konfigurationsdatei

Für den Lastenausgleich müssen Sie der nginx-Konfigurationsdatei zwei Dinge hinzufügen:1) Upstream 2) proxy_pass

Zuerst Upstream: Geben Sie einen eindeutigen Namen an (kann der Name Ihrer Anwendung sein) und listen Sie alle Server auf, die von diesem Nginx mit Lastenausgleich versehen werden.

Im folgenden Beispiel ist „crmdev“ der Name des Upstreams, also der Name der Anwendung, die auf beiden einzelnen Apache-Webservern (101.1 und 102.2 wie unten gezeigt) ausgeführt wird. Anstelle von „crmdev“ können Sie hier alles angeben, was Ihnen gefällt.

Hinweis:Der Upstream sollte in Ihrem „http“-Kontext von Nginx definiert werden.

upstream crmdev {
    server 192.168.101.1;
    server 192.168.101.2;
}

Hinweis:Wenn die einzelnen Server auf einem anderen Port (anders als Port 80) laufen, dann geben Sie die Portnummer wie unten gezeigt im Upstream

an
upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Zweitens, proxy_pass: Geben Sie den eindeutigen Upstream-Namen, der im vorherigen Schritt als proxy_pass definiert wurde, in Ihrem Abschnitt „Standort“ an, der sich wie unten gezeigt im Abschnitt „Server“ befinden wird.

server {
  listen 80;
  
  location / {
    proxy_pass http://crmdev;
  }
}

Hinweis:In diesem Beispiel lauscht nginx selbst auf Port 80, wie oben durch den Listen-Parameter gezeigt.

Bitte beachten Sie, dass Sie auch proxy_pass verwenden können, um Nginx als Reverse Proxy für Apache/PHP einzurichten.

2. Definieren Sie Upstream und Proxy_Pass in der Nginx-Standardkonfigurationsdatei

Hinweis:Normalerweise sollte das obige wie unten gezeigt unter http oder https stehen.

http {
  upstream crmdev {
   server 192.168.101.1:8080;
   server 192.168.101.2:8080;
  }

  server {
      listen 80;

      location / {
          proxy_pass http://crmdev;
      }
  }
}

Wenn Sie jedoch die default.conf verwenden, die mit der Standarddatei nginx.conf geliefert wird, müssen Sie das „http“ nicht angeben, da es bereits im http-Kontext definiert ist.

Hinweis:Ersetzen Sie für HTTPS den Kontext „http“ (in der 1. Zeile oben) durch https. Verwenden Sie außerdem in der Zeile proxy_pass https://{your-upstream-name}

Wenn Sie in diesem Fall „http“ wie oben gezeigt verwenden, erhalten Sie möglicherweise die folgende Fehlermeldung „http-Anweisung ist nicht zulässig“:

Starting nginx: nginx: [emerg] "http" directive is not allowed here in /etc/nginx/conf.d/default.conf:1

Dies ist die Kopie meiner default.conf-Datei, in der ich oben Upstream (ohne http) hinzugefügt und dann den Standardspeicherort auskommentiert und den neuen Speicherort mithilfe von proxy_pass hinzugefügt habe.

# vi /etc/nginx/conf.d/default.conf
upstream crmdev {
    server 127.0.0.1:4080;
    server 127.0.0.1:7080;
}
server {
  listen       3080;
  server_name  localhost;
  
  #location / {
  #    root   /usr/share/nginx/html;
  #    index  index.html index.htm;
  #}
  
  location / {
    proxy_pass http://crmdev;
  }
..
..
}

3. Least-Connected-Algorithmus für Nginx Load Balancer einrichten

Bei diesem Algorithmus wird die eingehende Anfrage an den Server mit der geringsten Anzahl bestehender aktiver Verbindungen gesendet.

Fügen Sie dazu das Schlüsselwort „least_conn“ oben im Upstream hinzu, wie unten gezeigt.

upstream crmdev {
    least_conn;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
}

Wenn Sie mehrere Server in der least_conn aufgelistet haben und mehrere Server eine ähnlich geringe Anzahl bestehender aktiver Verbindungen haben, dann wird unter diesen Servern einer basierend auf gewichtetem Round-Robin ausgewählt.

4. Persistenz oder Sticky-Algorithmus für Nginx Load Balancer einrichten

Der Nachteil der Round-Robin- und Least-Connected-Methode besteht darin, dass die nachfolgende Verbindung vom Client nicht zum selben Server im Pool geht. Dies kann für eine nicht sitzungsabhängige Anwendung in Ordnung sein.

Wenn Ihre Anwendung jedoch sitzungsabhängig ist, möchten Sie, sobald eine anfängliche Verbindung mit einem bestimmten Server hergestellt wurde, dass alle zukünftigen Verbindungen von diesem bestimmten Client zu demselben Server gehen. Verwenden Sie dazu den ip_hash-Algorithmus wie unten gezeigt.

upstream crmdev {
    ip_hash;
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
} 

Für den Hash werden für die IPv4-Adresse die ersten drei Oktetts verwendet. Wenn es sich um eine IPv6-Adresse handelt, wird die gesamte Adresse verwendet.

5. Gewichtsoptionen für die einzelnen Server

Sie können auch eine Gewichtung für einen bestimmten Server in Ihrem Pool angeben. Standardmäßig haben alle Server die gleiche Priorität (Gewichtung). d.h. der Standardwert von weight ist 1.

Sie können dieses Verhalten jedoch ändern, indem Sie einem Server wie unten gezeigt eine Gewichtung zuweisen.

upstream crmdev {
    server 192.168.101.1:8080;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

In diesem Beispiel haben wir insgesamt 5 Server. Aber die Gewichtung auf dem 3. Server ist 2. Das bedeutet, dass für jeweils 6 neue Anfragen 2 Anfragen an den 3. Server gehen und der Rest des Servers 1 Anfrage bekommt.

Dies ist also hilfreich, um mehr Last auf einen bestimmten Server mit mehr Leistung zu verteilen.

Obwohl im obigen Beispiel weight mit dem standardmäßigen Round-Robin-Algorithmus verwendet wird, können Sie weight auch für least_conn und ip_hash verwenden.

6. Timeout-Optionen für die einzelnen Server – max_fails und fail_timeout

Sie können auch max_fails und fail_timeout für einen bestimmten Server angeben, wie unten gezeigt.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080;
}

Oben:

  • Der Standardwert für fail_timeout beträgt 10 Sekunden. In diesem obigen Beispiel ist dies auf 30 Sekunden eingestellt. Das bedeutet, dass der Server innerhalb von 30 Sekunden nicht verfügbar ist, wenn es x fehlgeschlagene Versuche gibt (wie durch max_fails definiert). Außerdem bleibt der Server 30 Sekunden lang nicht verfügbar.
  • Der Standardwert für max_fails ist 1 Versuch. Im obigen Beispiel ist dies auf 3 Versuche eingestellt. Das bedeutet, dass Nginx nach 3 erfolglosen Versuchen, eine Verbindung zu diesem bestimmten Server herzustellen, diesen Server für die Dauer von fail_timeout von 30 Sekunden als nicht verfügbar betrachtet.

7. Weisen Sie einen Backup-Server im Nginx LoadBalancer-Pool zu

Im folgenden Beispiel wird der fünfte Server mit dem Schlüsselwort „backup“ am Ende des Serverparameters als Backup markiert.

upstream crmdev {
    server 192.168.101.1:8080 max_fails=3 fail_timeout=30s;
    server 192.168.101.2:8080;
    server 192.168.101.3:8080 weight 2;
    server 192.168.101.4:8080;
    server 192.168.101.5:8080 backup;
}

Das Obige macht den 5. Server (192.168.101.5) als Backup-Server. Eingehende Anfragen werden nicht an diesen Server weitergeleitet, es sei denn, alle anderen 4 Server sind ausgefallen.


Linux
  1. So leiten Sie HTTP zu HTTPS in Nginx um

  2. So konfigurieren Sie Nginx als Webserver und Reverse Proxy für Apache unter CentOS 8

  3. So richten Sie Nginx als Reverse Proxy für Apache unter Debian 11 ein

  4. Umleitung von HTTP zu HTTPS in NginX

  5. Wie leitet man HTTP automatisch auf HTTPS auf Apache-Servern um?

So richten Sie Nginx Cache auf einem LAMP-Server ein

So richten Sie den Nginx-Cache auf dem LEMP-Server ein

So installieren Sie NGINX als Reverse Proxy für Apache unter Ubuntu 18.04

So installieren Sie Apache Tomcat 10 auf Ubuntu 20.04 mit Nginx

So installieren Sie Apache Tomcat 10 auf Ubuntu 22.04 mit Nginx

So richten Sie einen NGINX RTMP-Server für das Streaming ein