設定範例
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; } }
指令
#語法: | upstream name { ... } |
預設值: | — |
#上下文: | #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, 一個請求分到第二個伺服器,一個請求分到第三個伺服器。與伺服器通訊的時候,如果發生錯誤,請求會傳給下一個伺服器,直到所有可用的伺服器都被嘗試過。如果所有伺服器都回傳失敗,客戶端將會得到最後通訊的那個伺服器的(失敗)回應結果。
語法: | server address [parameters]; |
預設值: | — |
上下文: | upstream |
#定義伺服器的位址address和其他參數parameters。位址可以是網域名稱或ip位址,連接埠是可選的,或是指定「unix:」前綴的unix域套接字的路徑。如果沒有指定端口,就使用80端口。如果一個網域解析到多個ip,本質上是定義了多個server。
你可以定義下面的參數:weight=number設定伺服器的權重,預設是1。 max_fails=number設定nginx與伺服器通訊的嘗試失敗的次數。在fail_timeout參數定義的時間段內,如果失敗的次數達到此值,nginx就認為伺服器不可用。在下一個fail_timeout時間段,伺服器不會再被嘗試。失敗的嘗試次數預設是1。設為0就會停止統計嘗試次數,認為伺服器是一直可用的。你可以透過指令proxy_next_upstream、 fastcgi_next_upstream和memcached_next_upstream來設定什麼是失敗的嘗試。預設配置時,http_404狀態不被認為是失敗的嘗試。 fail_timeout=time設定
統計失敗嘗試次數的時間段。在這段時間中,伺服器失敗次數達到指定的嘗試次數,伺服器就被認為不可用。
伺服器被認為不可用的時間段。
預設情況下,該超時時間是10秒。 backup標記為備用伺服器。當主伺服器無法使用以後,請求會傳給這些伺服器。 down標記伺服器永久不可用,可以跟ip_hash指令一起使用。
example:
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 |
從1.3.2和1.2.2版本開始支援ipv6位址。
如果其中一個伺服器想暫時移除,應該要加上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的負載平衡方法才支援設定伺服器權重值。
keepalive connections; | |
— | |
upstream |
语法: | 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的upstream配置和作用是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!