NGINX ngx_stream_core_module 模块

·
Tech nginx June 28, 2018

从 1.9.0 版本开始可以使用 ngx_stream_core_module 模块。 这个模板不是默认,需要通过启用 --with-stream 配置参数。

示例配置

worker_processes auto;

error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

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

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp reuseport;
        proxy_timeout 20s;
        proxy_pass dns;
    }

    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

指令

Syntax: listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [rcvbuf=size]
[sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|

Default: —
Context: server

设置服务器监听 socket 的 address 和 port。可以只指定 port, address 可以是主机名。

listen 127.0.0.1:12345;
listen *:12345;
listen 12345;     # same as *:12345
listen localhost:12345;

IPv6 地址用方括号指定。

listen [::1]:12345;
listen [::]:12345;

UNIX-domain socket 用 "unix:" 前缀指定。

listen unix:/var/run/nginx.sock;

ssl 参数允许指定该端口接受的所有连接工作在 ssl 模式。
udp 参数配置用于处理数据报的监听套接字。
proxy_protocol 参数允许指定此端口所有接受的连接使用 PROXY protocol
backlog=number 设置 listen() 的 backlog 参数,该参数限制未决连接队列的最大长度。FreeBSD, DragonFly BSD 和 MacOS 的默认值是 -1, 其他平台的默认值是 511。
rcvbuf=size 设置监听 socket 的接收缓冲区大小(SO_RCVBUF)。
sndbuf=size 设置监听 socket 的发送缓冲区大小(SO_SNDBUF)。
bind 对给定的 address:port 单独调用 bind()。如果有多个 listen 指令用于不同地址相同的端口,并且其中一个 listen 监听了这个端口的所有地址(:port), nginx 将只对 :port 调用一次 bind() 。需要注意的是,在这种情况下将会 getsockname 系统调用来确定接受连接的地址。如果使用了 ipv6only 或者 so_keepalive 参数,那么会始终会为这个 address:port 进行单独的 bind() 调用。
ipv6only=on|off 此参数设置只接受 IPv6 连接还是 IPv6 和 IPv4 连接。这个参数默认是打开的。
reuseport 此参数为每个工作进程创建独立的监听 socket (使用 SO_REUSEPORT socket 选项),允许内核在工作进程间对传入的连接进行负载均衡。只能运行在 Linux 3.9+ 和 DragonFly BSD不恰当地使用可能会产生安全隐患。Nginx listen reuseport参数带来的性能提升。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt] 此参数配置了监听 socket 的 "TCP keepalive"。如果省略了这个参数,将会使用操作系统的设置。如果设置为 "on" ,这个 socket 的 SO_KEEPALIVE 选项将被打开。如果设置为 "off" ,这个 socket 的 SO_KEEPALIVE 选项将被关闭。某些操作系统(Linux 2.4+, NetBSD 5+ 和 FreeBSD 9.0-STABLE)支持对每个 socket 使用 keepidle, keepintvl 和 keepcnt 来配置 TCP_KEEPIDLE, TCP_KEEPINTVL 和 TCP_KEEPCNT 选项。一个或两个参数可以省略,这种情况下省略的参数将使用系统默认设置。举个例子,so_keepalive=30m::10, 空闲超时 (TCP_KEEPIDLE) 将被设为 30 分钟,保留探测时间间隔 (TCP_KEEPINTVL) 使用系统默认值,保留探测次数 (TCP_KEEPCNT) 设置为10次。
不同的服务器必须使用不同的 address:port。

Syntax: preread_buffer_size size;
Default: preread_buffer_size 16k;
Context: stream, server
This directive appeared in version 1.11.5.

指定 preread buffer 大小。

Syntax: preread_timeout timeout;
Default: preread_timeout 30s;
Context: stream, server
This directive appeared in version 1.11.5.

指定 preread 阶段的超时时间,

Syntax: proxy_protocol_timeout timeout;
Default: proxy_protocol_timeout 30s;
Context: stream, server
This directive appeared in version 1.11.4.

指定读取 PROXY 协议头部的超时时间。如果给定时间内没有发送完整的头部,则将连接关闭。

Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: stream, server
This directive appeared in version 1.11.3.

配置名称服务器,用于将 upstream 服务器名称解析为地址。例如,resolver 127.0.0.1 [::1]:5353;,地址可以为域名或者 IP 地址,以及可选的端口。如果不指定端口则使用 53 端口。以轮询的方式查询名称服务器。
默认情况下,nginx 在解析时会同时查找 IPv4 和 IPv6. 如果不需要查找 IPv6 地址,可以设置 ipv6=off.
默认情况下,nginx 缓存会使用应答的 TTL 值来回应。有可选值 valid 来覆盖它。 resolver 127.0.0.1 [::1]:5353 valid=30s;

Syntax: resolver_timeout time;
Default: resolver_timeout 30s;
Context: stream, server
This directive appeared in version 1.11.3.

设置名称解析的超时时间。

Syntax: server { ... }
Default: —
Context: stream

服务器配置。

Syntax: stream { ... }
Default: —
Context: main

为指定的流服务器提供配置上下文。

Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: stream, server
This directive appeared in version 1.9.4.

禁用或启用 TCP_NODELAY 选项。此选项对客户端和代理服务器连接均启用。

Syntax: variables_hash_bucket_size size;
Default: variables_hash_bucket_size 64;
Context: stream
This directive appeared in version 1.11.2.

设置变量散列表的桶大小。具体细节见文档。

Syntax: variables_hash_max_size size;
Default: variables_hash_max_size 1024;
Context: stream
This directive appeared in version 1.11.2.

设置变量散列表的最大大小。具体细节见文档。

  • streamparse 学习笔记
  • TCP Keepalive 学习
取消回复

说点什么?

© 2023 Coo's Note. Using Typecho & Moricolor.