구성 예
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; } }
Command
구문: | 업스트림 이름 { ... } |
기본값: | — |
컨텍스트: | 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개의 요청은 두 번째 서버에 배포되고, 1개의 요청은 세 번째 서버에 배포됩니다. 서버와 통신 중 오류가 발생하면 사용 가능한 모든 서버를 시도할 때까지 다음 서버로 요청이 전달됩니다. 모든 서버가 실패를 반환하면 클라이언트는 마지막으로 통신한 서버로부터 (실패) 응답을 받습니다.
구문: | 서버 주소 [매개변수]; |
기본값: | — |
컨텍스트: | upstream |
서버 주소와 기타 매개변수를 정의하세요. 주소는 도메인 이름 또는 IP 주소일 수 있으며, 포트는 선택 사항이거나 "unix:" 접두사를 지정하는 Unix 도메인 소켓에 대한 경로입니다. 포트를 지정하지 않으면 포트 80이 사용됩니다. 도메인 이름이 여러 IP로 확인되면 기본적으로 여러 서버가 정의됩니다.
다음 매개변수를 정의할 수 있습니다. Weight=number는 서버의 가중치를 설정하며 기본값은 1입니다. max_fails=number는 nginx가 서버와 통신하려는 시도에 실패한 횟수를 설정합니다. failure_timeout 매개변수에 정의된 기간 내에 실패 횟수가 이 값에 도달하면 nginx는 서버를 사용할 수 없는 것으로 간주합니다. 다음 failure_timeout 기간 동안 서버는 다시 시도되지 않습니다. 실패한 시도 횟수의 기본값은 1입니다. 0으로 설정하면 시도 횟수 계산이 중지되고 서버가 항상 사용 가능한 것으로 간주됩니다. Proxy_next_upstream, fastcgi_next_upstream 및 memcached_next_upstream 지시어를 통해 실패한 시도로 간주되는 것을 구성할 수 있습니다. 기본적으로 구성된 경우 http_404 상태는 실패한 시도로 간주되지 않습니다. failure_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 주소를 기반으로 서버 간에 분산됩니다. IPv4 주소의 처음 3바이트 또는 전체 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의 로드 밸런싱 방식은 서버 가중치 값 설정만 지원합니다.
구문:
기본값: |
|||||||
컨텍스트: | |||||||
这个指令出现在版本 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连接的打算。
这个指令出现在版本 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!