Was ist die Upstream-Konfiguration und Funktion von Nginx?

WBOY
Freigeben: 2023-05-30 22:28:04
nach vorne
2576 Leute haben es durchsucht

Konfigurationsbeispiel

upstream backend {
  server backend1.example.com    weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;

  server backup1.example.com:8080  backup;
  server backup2.example.com:8080  backup;
}

server {
  location / {
    proxy_pass http://backend;
  }
}
Nach dem Login kopieren

Befehl

Syntax:Upstream-Name { ... }
Standardwert:
Kontext: http

Definition Eine Reihe von Servern. Diese Server können verschiedene Ports überwachen. Darüber hinaus können Server, die auf TCP- und UNIX-Domänen-Sockets lauschen, gemischt sein.

Beispiel:

upstream backend {
  server backend1.example.com weight=5;
  server 127.0.0.1:8080    max_fails=3 fail_timeout=30s;
  server unix:/tmp/backend3;
}
Nach dem Login kopieren

Standardmäßig verteilt Nginx Anfragen in einem gewichteten Round-Robin an jeden Server. Im obigen Beispiel werden alle 7 Anfragen auf folgende Weise verteilt: 5 Anfragen werden an backend1.example.com verteilt, 1 Anfrage wird an den zweiten Server verteilt und 1 Anfrage wird an den dritten Server verteilt. Tritt bei der Kommunikation mit dem Server ein Fehler auf, wird die Anfrage an den nächsten Server weitergeleitet, bis alle verfügbaren Server ausprobiert wurden. Wenn alle Server einen Fehler melden, erhält der Client eine (Fehler-)Antwort vom letzten Server, mit dem er kommuniziert hat.

Syntax:Serveradresse [Parameter];
Standardwert:
Kontext:upstream
.

Definieren Sie die Serveradresse und andere Parameter. Die Adresse kann ein Domänenname oder eine IP-Adresse sein, und der Port ist optional oder ein Pfad zu einem Unix-Domänen-Socket unter Angabe des Präfixes „unix:“. Wenn kein Port angegeben ist, wird Port 80 verwendet. Wenn ein Domänenname in mehrere IPs aufgelöst wird, werden im Wesentlichen mehrere Server definiert.

Sie können die folgenden Parameter definieren: Gewicht = Zahl legt das Gewicht des Servers fest, der Standardwert ist 1. max_fails=number legt die Anzahl der fehlgeschlagenen Versuche von Nginx fest, mit dem Server zu kommunizieren. Wenn innerhalb des durch den Parameter fail_timeout definierten Zeitraums die Anzahl der Fehler diesen Wert erreicht, betrachtet Nginx den Server als nicht verfügbar. Während des nächsten fail_timeout-Zeitraums wird der Server nicht erneut versucht. Die Anzahl der Fehlversuche ist standardmäßig auf 1 eingestellt. Wenn Sie den Wert auf 0 setzen, werden die Versuche nicht mehr gezählt und der Server wird als immer verfügbar betrachtet. Über die Anweisungen „proxy_next_upstream“, „fastcgi_next_upstream“ und „memcached_next_upstream“ können Sie konfigurieren, was als fehlgeschlagener Versuch gilt. Bei standardmäßiger Konfiguration wird der Status http_404 nicht als fehlgeschlagener Versuch betrachtet. fail_timeout=time legt den Zeitraum für die Zählung der Anzahl fehlgeschlagener Versuche fest. Wenn der Server während dieses Zeitraums für die angegebene Anzahl von Versuchen ausfällt, gilt der Server als nicht verfügbar.

  • Der Zeitraum, in dem der Server als nicht verfügbar gilt.

  • Standardmäßig beträgt dieses Timeout 10 Sekunden. Backup ist als Backup-Server markiert. Wenn der Hauptserver nicht verfügbar ist, werden Anfragen an diese Server weitergeleitet. down markiert den Server als dauerhaft nicht verfügbar und kann mit der ip_hash-Direktive verwendet werden.

  • Beispiel:
upstream backend {
  server backend1.example.com   weight=5;
  server 127.0.0.1:8080      max_fails=3 fail_timeout=30s;
  server unix:/tmp/backend3;

  server backup1.example.com:8080 backup;
}
Nach dem Login kopieren

Syntax:ip_hash; – upstreamGeben Sie die Lastausgleichsmethode der Servergruppe an , Anfrage Wird basierend auf der IP-Adresse des Clients auf Server verteilt. Die ersten drei Bytes der IPv4-Adresse oder die gesamte IPv6-Adresse werden als Hash-Schlüssel verwendet. Diese Methode stellt sicher, dass Anfragen desselben Clients an denselben Server weitergeleitet werden. Sofern der Server nicht als nicht verfügbar gilt, werden diese Clientanforderungen an andere Server weitergeleitet, höchstwahrscheinlich an denselben Server.

Standardwert:
Kontext:
Unterstützt IPv6-Adressen ab Version 1.3.2 und 1.2.2.

Wenn einer der Server vorübergehend entfernt werden möchte, sollte der Down-Parameter hinzugefügt werden. Dadurch bleibt die aktuelle Client-IP-Adress-Hash-Verteilung erhalten. Beispiel:

upstream backend {
  ip_hash;

  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com down;
  server backend4.example.com;
}
Nach dem Login kopieren

Ab Version 1.3.1 und 1.2.2 unterstützt die Lastausgleichsmethode von ip_hash nur das Festlegen des Servergewichtswerts.

Syntax:Keepalive-Verbindungen; – upstream

Standardwert:
Kontext:

这个指令出现在版本 1.1.4.

激活对上游服务器的连接进行缓存。

connections参数设置每个worker进程与后端服务器保持连接的最大数量。这些保持的连接会被放入缓存。 如果连接数大于这个值时,最久未使用的连接会被关闭。

需要注意的是,keepalive指令不会限制nginx进程与上游服务器的连接总数。 新的连接总会按需被创建。 connections参数应该稍微设低一点,以便上游服务器也能处理额外新进来的连接。

配置memcached上游服务器连接keepalive的例子:

upstream memcached_backend {
  server 127.0.0.1:11211;
  server 10.0.0.2:11211;

  keepalive 32;
}

server {
  ...

  location /memcached/ {
    set $memcached_key $uri;
    memcached_pass memcached_backend;
  }

}
Nach dem Login kopieren

对于http代理,proxy_http_version指令应该设置为“1.1”,同时“connection”头的值也应被清空。

upstream http_backend {
  server 127.0.0.1:8080;

  keepalive 16;
}

server {
  ...

  location /http/ {
    proxy_pass http://http_backend;
    proxy_http_version 1.1;
    proxy_set_header connection "";
    ...
  }
}
Nach dem Login kopieren

另外一种选择是,http/1.0协议的持久连接也可以通过发送“connection: keep-alive”头来实现。不过不建议这样用。

对于fastcgi的服务器,需要设置 fastcgi_keep_conn 指令来让连接keepalive工作:

upstream fastcgi_backend {
  server 127.0.0.1:9000;

  keepalive 8;
}

server {
  ...

  location /fastcgi/ {
    fastcgi_pass fastcgi_backend;
    fastcgi_keep_conn on;
    ...
  }
}
Nach dem Login kopieren

当使用的负载均衡方法不是默认的轮转法时,必须在keepalive 指令之前配置。

针对scgi和uwsgi协议,还没有实现其keepalive连接的打算。

语法: least_conn;
 
默认值:
上下文: upstream

这个指令出现在版本 1.3.1 和 1.2.2.

指定服务器组的负载均衡方法,根据其权重值,将请求发送到活跃连接数最少的那台服务器。 如果这样的服务器有多台,那就采取有权重的轮转法进行尝试。

嵌入的变量

ngx_http_upstream_module模块支持以下嵌入变量:

$upstream_addr保存服务器的ip地址和端口或者是unix域套接字的路径。 在请求处理过程中,如果有多台服务器被尝试了,它们的地址会被拼接起来,以逗号隔开,比如: “192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock”。 如果在服务器之间通过“x-accel-redirect”头或者error_page有内部跳转,那么这些服务器组之间会以冒号隔开,比如:“192.168.1.1:80, 192.168.1.2:80, unix:/tmp/sock : 192.168.10.1:80, 192.168.10.2:80”。$upstream_response_time以毫秒的精度保留服务器的响应时间,(输出)单位是秒。 出现多个响应时,也是以逗号和冒号隔开。$upstream_status保存服务器的响应代码。 出现多个响应时,也是以逗号和冒号隔开。$upstream_http_...保存服务器的响应头的值。比如“server”响应头的值可以通过$upstream_http_server变量来获取。 需要注意的是只有最后一个响应的头会被保留下来。

Das obige ist der detaillierte Inhalt vonWas ist die Upstream-Konfiguration und Funktion von Nginx?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage