Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Apakah konfigurasi huluan dan fungsi nginx?

Apakah konfigurasi huluan dan fungsi nginx?

WBOY
WBOYke hadapan
2023-05-30 22:28:042583semak imbas

Contoh konfigurasi

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;
  }
}

Arahan

Sintaks: nama huluan { .. . }
语法: upstream name { ... }
 
默认值:
上下文: http
Nilai lalai:
Konteks: http

Tentukan kumpulan pelayan. Pelayan ini boleh mendengar pada port yang berbeza. Tambahan pula, pelayan yang mendengar pada soket domain TCP dan UNIX boleh dicampur.

Contoh:

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

Secara lalai, nginx mengedarkan permintaan kepada setiap pelayan dalam round robin berwajaran. Dalam contoh di atas, setiap 7 permintaan akan diedarkan mengikut cara berikut: 5 permintaan diedarkan ke backend1.example.com, 1 permintaan diedarkan ke pelayan kedua dan 1 permintaan diedarkan ke pelayan ketiga. Jika ralat berlaku semasa berkomunikasi dengan pelayan, permintaan akan dihantar ke pelayan seterusnya sehingga semua pelayan yang tersedia telah dicuba. Jika semua pelayan mengembalikan kegagalan, pelanggan akan mendapat respons (kegagalan) daripada pelayan terakhir yang berkomunikasi dengannya.

Nilai lalai:

Tentukan alamat pelayan dan parameter lain. Alamat boleh menjadi nama domain atau alamat IP, dan port adalah pilihan, atau laluan ke soket domain unix yang menyatakan awalan "unix:". Jika tiada port dinyatakan, port 80 digunakan. Jika nama domain diselesaikan kepada berbilang IP, berbilang pelayan pada dasarnya ditakrifkan.

Anda boleh mentakrifkan parameter berikut: weight=number menetapkan berat pelayan Lalai ialah 1. max_fails=number menetapkan bilangan percubaan yang gagal oleh nginx untuk berkomunikasi dengan pelayan. Dalam tempoh masa yang ditentukan oleh parameter fail_timeout, jika bilangan kegagalan mencapai nilai ini, nginx akan menganggap pelayan tidak tersedia. Dalam tempoh fail_timeout seterusnya, pelayan tidak akan dicuba lagi. Bilangan percubaan yang gagal menjadi lalai kepada 1. Menetapkannya kepada 0 akan berhenti mengira percubaan dan menganggap pelayan sentiasa tersedia. Anda boleh mengkonfigurasi perkara yang dianggap sebagai percubaan yang gagal melalui arahan proxy_next_upstream, fastcgi_next_upstream dan memcached_next_upstream. Apabila dikonfigurasikan secara lalai, status http_404 tidak dianggap sebagai percubaan yang gagal. fail_timeout=masa ditetapkan

  • tempoh masa untuk mengira percubaan yang gagal. Dalam tempoh ini, jika pelayan gagal untuk bilangan percubaan yang ditentukan, pelayan dianggap tidak tersedia.

  • Tempoh masa di mana pelayan dianggap tidak tersedia.

Secara lalai, tamat masa ini ialah 10 saat. sandaran ditandakan sebagai pelayan sandaran. Apabila pelayan utama tidak tersedia, permintaan akan dihantar kepada pelayan ini. down menandakan pelayan sebagai tidak tersedia secara kekal dan boleh digunakan dengan arahan ip_hash.

contoh:

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;
}
Syntax: alamat pelayan [parameter];
语法: server address [parameters];
 
默认值:
上下文: upstream
Konteks: upstream
Syntax: ip_hash;
语法: ip_hash;
 
默认值:
上下文: upstream
Lalai:
Konteks: huluan

Nyatakan kaedah pengimbangan beban kumpulan pelayan dan permintaan diedarkan antara pelayan berdasarkan alamat IP pelanggan. Tiga bait pertama alamat IPv4, atau keseluruhan alamat IPv6, akan digunakan sebagai kunci cincang. Kaedah ini memastikan permintaan daripada klien yang sama akan dihantar ke pelayan yang sama. Kecuali apabila pelayan dianggap tidak tersedia, permintaan pelanggan ini akan dihantar ke pelayan lain, kemungkinan besar pelayan yang sama.

Menyokong alamat ipv6 bermula dari versi 1.3.2 dan 1.2.2.

Jika salah satu pelayan ingin dialih keluar buat sementara waktu, parameter bawah perlu ditambah. Ini mengekalkan pengedaran cincang alamat IP klien semasa.

Contoh:

upstream backend {
  ip_hash;

  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com down;
  server backend4.example.com;
}

Bermula dari versi 1.3.1 dan 1.2.2, kaedah pengimbangan beban ip_hash hanya menyokong penetapan nilai berat pelayan.

Nilai lalai:

这个指令出现在版本 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连接的打算。

Syntax: keepalive connections;
语法: keepalive connections;
 
默认值:
上下文: upstream
Konteks: 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变量来获取。 需要注意的是只有最后一个响应的头会被保留下来。

Atas ialah kandungan terperinci Apakah konfigurasi huluan dan fungsi nginx?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam