ngx_stream_core_module模块从1.9.0版本起可用。该模块默认不会构建,需要通过–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;
proxy_responses 1;
proxy_timeout 20s;
proxy_pass dns;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
}
listen
语法:listen address:port [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]
默认:—
上下文:server
设置服务器接受连接的socket的地址和端口号。可以只指定端口号。地址可以是一个主机名,例如:
listen 127.0.0.1:12345;
listen *:12345;
listen 12345; #同 *:12345
listen localhost:12345;
IPv6地址指定在方括号中:
listen [::1]:12345;
listen [::]:12345;
UNIX-domain socket指定以“unix:”前缀开头:
listen unix:/var/run/nginx.sock;
ssl参数允许指定此端口上所有接受的连接都工作在SSL模式。
udp参数配置了监听数据报的socket(1.9.13+)。
listen指令可以由多个附加参数指定socket相关的系统调用。
backlog=number
设置listen调用的backlog参数,会限制等待连接的队列的最大长度(1.9.2+)。默认情况下,在FreeBSD、DragonFly BSD、Mac OS X上backlog设置为-1,其他平台上为511.
bind
该参数指明了为给定的地址端口对进行单独的bind调用。实际上,如果有很多相同端口但地址不同的listen指令,其中有一个listen指令监听给定端口的所有地址(*:port),nginx会只绑定*:port。注意getsocketname()系统调用会在这时决定接受连接的地址。如果使用了ipv6only或so_keepalive参数,那么对于给定的地址端口对,总会有单独的bind调用。
ipv6only=on|off
这个参数决定了通过通配符[::]监听的ipv6socket是只接受IPv6连接还是IPv6和IPv4都接受。这个参数默认是开启的。它只能在启动时设置一次。
reuseport
这个参数(1.9.1+)指示为每一个工作进程创建独立的监听socket(使用SO_REUSEPORT socket选项),允许内核在工作进程之间分配进来的连接。这个目前只能工作在Linux3.9及更高版本和DragonFly BSD上。
不当的使用这个选项会有安全问题。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
该参数为监听的socket配置“TCP keepalive”行为。如果这个参数忽略,则操作系统将影响socket。如果它设为on,SO_KEEPALIVE选项会打开。如果它设为off,SO_KEEPALIVE选项会关闭。一些操作系统支持为每一个socket设置TCP keepalive参数,通过TCP_KEEPIDLE、TCP_KEEPINTVL和TCP_KEEPCNT socket选项。在这些系统上(目前是,Linux2.4+、NetBSD 5+以及FreeBSD9.0-STABLE),它们可以通过keepidle、keepintvl以及keepcnt参数设置。一个或两个参数可以被省略,这时操作系统的默认设置会起作用,例如:
so_keepalive=30m::10
将设置空闲超时(TCP_KEEPIDLE)为30分钟,让探测间隔(TCP_KEEPINTVL)使用系统默认,设置探测数(TCP_KEEPCNT)为10。
不同的服务器必须监听不同的地址端口对。
resolver
语法:resolver address … [valid=time] [ipv6=on|off]
默认:—
上下文:stream, server
配置名称服务器用于解析上游服务器的名称到地址,例如:
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;
这个指令是商业版本的一部分。
resolver_timeout
语法:resolver_timeout time
默认:resolver_timeout 30s
上下文:stream, server
设置名称解析的超时时间,例如:
resolver_timeout 5s;
该指令是商业版本的一部分。
server
语法:server { … }
默认:—
上下文:stream
为一个服务器设置配置信息。
stream
语法:stream { … }
默认:—
上下文:main
为stream server指令提供配置文件上下文。
tcp_nodelay
语法:tcp_nodelay on | off
默认:tcp_nodelay on
上下文:stream, server
版本:1.9.4+
启用或禁用使用TCP_NODELAY选项。该选项同时为客户端和被代理服务器连接启用。