設定例
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;
}
} ログイン後にコピー
コマンド
構文: アップストリーム名 { ... } #デフォルト:#— #コンテキスト: ##http#サーバーのグループを定義します。これらのサーバーは異なるポートでリッスンできます。さらに、TCP および UNIX ドメイン ソケットでリッスンするサーバーを混在させることができます。 例: upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
} ログイン後にコピー
デフォルトでは、nginx は重み付けローテーションでリクエストを各サーバーに分散します。上記の例では、7 つのリクエストごとに次の方法で分散されます。5 つのリクエストが backend1.example.com に分散され、1 つのリクエストが 2 番目のサーバーに分散され、1 つのリクエストが 3 番目のサーバーに分散されます。サーバーとの通信中にエラーが発生した場合、使用可能なすべてのサーバーが試行されるまで、リクエストは次のサーバーに渡されます。すべてのサーバーが失敗を返した場合、クライアントは最後に通信したサーバーから (失敗) 応答を受け取ります。
構文:
サーバー アドレス [パラメータ]; デフォルト値: #コンテキスト: アップストリーム サーバーのアドレス address およびその他のパラメーターを定義します。アドレスはドメイン名または IP アドレスにすることができ、ポートはオプション、または「unix:」プレフィックスを指定する UNIX ドメイン ソケットへのパスです。ポートが指定されていない場合は、ポート 80 が使用されます。ドメイン名が複数の IP に解決される場合、基本的に複数のサーバーが定義されます。 次のパラメータを定義できます:weight=number はサーバーの重みを設定します。デフォルトは 1 です。 max_fails=number は、nginx によるサーバーとの通信試行の失敗回数を設定します。 failed_timeout パラメータで定義された期間内に、失敗の数がこの値に達すると、nginx はサーバーが利用できないとみなします。次のfail_timeout期間中、サーバーは再試行されません。失敗した試行回数のデフォルトは 1 です。これを 0 に設定すると、試行のカウントが停止され、サーバーが常に利用可能であると見なされます。ディレクティブ proxy_next_upstream、fastcgi_next_upstream、memcached_next_upstream を使用して、失敗した試行とみなされるものを設定できます。デフォルトで構成されている場合、http_404 ステータスは失敗した試行とはみなされません。 failed_timeout=time は、失敗した試行回数をカウントする期間を
# に設定します。この期間中、指定された回数試行してもサーバーが失敗すると、サーバーは使用できないとみなされます。
#サーバーが利用できないとみなされる期間。
デフォルトでは、タイムアウトは 10 秒です。バックアップはバックアップ サーバーとしてマークされます。メインサーバーが利用できない場合、リクエストはこれらのサーバーに渡されます。 down はサーバーを永続的に利用できないものとしてマークし、ip_hash ディレクティブで使用できます。 例:
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;
} ログイン後にコピー
構文:
ip_hash;
デフォルト値: #コンテキスト:upstream の負荷を指定します。サーバー グループ バランス方式。リクエストはクライアントの IP アドレスに基づいてサーバー間で分散されます。 IPv4 アドレスの最初の 3 バイト、または IPv6 アドレス全体がハッシュ キーとして使用されます。このメソッドにより、同じクライアントからのリクエストが同じサーバーに確実に渡されます。サーバーが利用できないとみなされる場合を除き、これらのクライアント要求は他のサーバー (おそらく同じサーバー) に渡されます。 IPv6 アドレスは、バージョン 1.3.2 および 1.2.2 以降でサポートされます。 サーバーの 1 つを一時的に削除する場合は、down パラメーターを追加する必要があります。これにより、現在のクライアント IP アドレスのハッシュ分布が保存されます。
例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
} ログイン後にコピー
バージョン 1.3.1 および 1.2.2 以降、ip_hash の負荷分散方法はサーバーの重み値の設定のみをサポートします。
構文:
キープアライブ接続;
デフォルト値: #コンテキスト: アップストリーム这个指令出现在版本 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;
}
} ログイン後にコピー
对于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 "";
...
}
} ログイン後にコピー
另外一种选择是,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;
...
}
} ログイン後にコピー
当使用的负载均衡方法不是默认的轮转法时,必须在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变量来获取。 需要注意的是只有最后一个响应的头会被保留下来。
以上がnginx のアップストリーム構成と機能は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
2025-02-26 03:58:14
2025-02-26 03:38:10
2025-02-26 03:17:10
2025-02-26 02:49:09
2025-02-26 01:08:13
2025-02-26 00:46:10
2025-02-25 23:42:08
2025-02-25 22:50:13
2025-02-25 21:54:11
2025-02-25 20:45:11
最新の問題
2025-03-17 17:09:10
2025-03-17 17:08:32
2025-03-17 17:06:28
2025-03-17 17:03:14
2025-03-17 17:02:35