>운영 및 유지보수 >엔진스 >nginx의 업스트림 구성과 기능은 무엇입니까?

nginx의 업스트림 구성과 기능은 무엇입니까?

WBOY
WBOY앞으로
2023-05-30 22:28:042630검색

구성 예

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_hash;—upstream서버 그룹의 로드 밸런싱 방식을 지정하세요. , 요청 클라이언트의 IP 주소를 기반으로 서버 간에 분산됩니다. IPv4 주소의 처음 3바이트 또는 전체 IPv6 주소가 해시 키로 사용됩니다. 이 방법을 사용하면 동일한 클라이언트의 요청이 동일한 서버로 전달됩니다. 서버를 사용할 수 없는 것으로 간주되는 경우를 제외하고 이러한 클라이언트 요청은 다른 서버(대부분 동일한 서버)로 전달됩니다.

기본값:
컨텍스트:
버전 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 연결;—upstream

기본값:
컨텍스트:

这个指令出现在版本 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제