ngx_stream_core_module

    为接受连接服务器的 socket 设置 addressport。可仅指定端口。地址也可以是主机名,例如:

    1. listen 127.0.0.1:12345;
    2. listen *:12345;
    3. listen 12345; # same as *:12345
    4. listen localhost:12345;

    IPv6 地址需要在方括号中指定:

    UNIX 域套接字务必加上 unix: 前缀:

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

    ssl 参数允许端口上接受的所有连接都在 SSL 模式下工作。

    udp 参数配置一个监听 socket 以处理数据报(1.9.13)。

    proxy_protocol 参数(1.11.4)允许指定端口上接受的所有连接都使用 。

    listen 指令有几个专门与套接字相关的系统调用的附加参数。

    • backlog=number

      listen() 调用中设置 backlog 参数,该参数限制挂起连接队列的最大长度(1.9.2)。默认情况下,backlog 在 FreeBSD、DragonFly BSD 和 macOS 上设置为 -1,在其他平台上设置为 511。

    • rcvbuf=size

      设置监听套接字的接收缓冲区大小(SO_RCVBUF 选项)(1.11.13)。

    • sndbuf=size

      设置监听套接字的发送缓冲区大小(SO_SNDBUF 选项)(1.11.13)。

    • bind

      此参数对给定的 address:port 对进行单独的 bind() 调用。事实上,如果存在几个具有相同端口但地址不同的 listen 指令,并且其中一个 listen 指令监听给定的端口(*:port)的所有地址,则 nginx 将 bind() 仅限于 *:port 范围。要注意的是,在这种情况下将调用 getsockname() 系统调用以确定接受连接的地址。如果使用了 ipv6onlyso_keepalive 参数,那么对于指定的address:port 对将始终对 单独调用。

    • ipv6only=on|off

      此参数确定(通过 IPV6_V6ONLY 套接字选项)监听通配符地址 [::] 的 IPv6 套接字是接受 IPv6 和 IPv4 连接还是仅接受 IPv6 连接。默认情况下,此参数处于启用状态。它只能在启动时设置一次。

    • reuseport

      此参数(1.9.1)表示为每个 worker 进程创建一个单独的监听套接字(在 Linux 3.9+ 和 DragonFly BSD 上使用 SO_REUSEPORT 套接字选项,在 FreeBSD 12+ 上使用 SO_REUSEPORT_LB),允许内核在 worker 进程之间分配传入连接。目前仅适用于 Linux 3.9+、DragonFly BSD 和 FreeBSD 12+(1.15.1)。

    • so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]

      此参数配置监听套接字的 TCP keepalive 行为。如果省略此参数,将启用操作系统的套接字设置。如果将其设置为值 on,则为套接字打开 SO_KEEPALIVE 选项。如果将其值设置为 off,则为套接字关闭 SO_KEEPALIVE 选项。某些操作系统支持使用 TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字选项在每个套接字的基础上设置 TCP keepalive 参数。在此类系统上(目前有 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),可以使用 keepidlekeepintvlkeepcnt 参数配置。可省略一两个参数,在该情况下,相应套接字选项的系统默认设置将生效。例如,

      将设置空闲超时(TCP_KEEPIDLE)为 30 分钟,探测间隔(TCP_KEEPINTVL)保留为系统默认值,将探测包数(TCP_KEEPCNT)设置为 10 个。

    不同的服务器必须侦听不同的 address:port 对。

    preread_buffer_size

    - 说明
    语法 preread_buffer_size size;
    默认 preread_buffer_size 16k;
    上下文 stream、server
    提示 该指令在 1.11.5 版本中出现

    指定的 size(大小)。

    preread_timeout

    - 说明
    语法 preread_timeout timeout;
    默认 preread_timeout 30s;
    上下文 stream、server
    提示 该指令在 1.11.5 版本中出现

    指定的 timeout(超时时间)。

    指定读取 PROXY 协议头完成的 timeout(超时时间)。如果在此时间内未传输完整个头,则关闭连接。

    resolver

    - 说明
    语法 resolver `address … [valid=time] [ipv6=on\ off]`;
    默认 ——
    上下文 stream、server
    提示 该指令在 1.11.3 版本中出现

    将用于解析上游服务器名称的域名服务器(Name Server)配置到地址列表中,例如:

    1. resolver 127.0.0.1 [::1]:5353;

    默认情况下,nginx 将在解析时查找 IPv4 和 IPv6 地址。如果不需要查找 IPv6 地址,可以配置 ipv6=off 参数。

    默认情况下,nginx 使用响应 TTL 值缓存响应。可选的 valid 参数可改写该行为:

    server

    - 说明
    语法 server { ... };
    默认 ——
    上下文 stream

    配置 server。

    为指定 stream server 指令的提供配置文件上下文。

    tcp_nodelay

    - 说明
    语法 tcp_nodelay on | ;
    默认 tcp_nodelay on;
    上下文 stream、server
    提示 该指令在 1.9.4 版本中出现

    启用或禁用 TCP_NODELAY 选项。该选项对客户端和代理服务器连接都有作用。

    variables_hash_bucket_size

    - 说明
    语法 variables_hash_bucket_size size;
    默认 variables_hash_bucket_size 64;
    上下文 stream
    提示 该指令在 1.11.2 版本中出现

    设置变量哈希表的桶大小。设置哈希表的详细信息在单独的文档有详细说明。

    ngx_stream_core_module 模块自 1.11.2 版本起支持变量。

    • $binary_remote_addr

      客户端地址采用二进制形式,值的长度始终为 IPv4 地址的 4 个字节或 IPv6 地址的 16 个字节

    • $bytes_received

      从客户端收到的字节数(1.11.4)

    • $bytes_sent

      发送到客户端的字节数

    • $hostname

      主机名

    • $msec

      以秒为单位的当前时间(精度为毫秒)

    • $nginx_version

      nginx 版本

    • $pid

      worker 进程 PID

    • $protocol

      用于与客户端通信的协议:TCPUDP(1.11.4)

    • $proxy_protocol_addr

      来自 PROXY 协议头的客户端地址,否则为空字符串(1.11.4)

      必须先在 listen 指令中设置 proxy_protocol 参数来启用 PROXY 协议。

    • $proxy_protocol_port

      必须先在 指令中设置 proxy_protocol 参数来启用 PROXY 协议。

    • $remote_addr

      客户地址

    • $remote_port

      客户端端口

    • $server_addr

      接受连接的服务器地址

      计算此变量的值通常需要一次系统调用。为避免系统调用,listen 指令必须指定地址并使用 bind 参数。

    • $server_port

      接受连接的服务器端口

    • $session_time

      会话持续时间(以秒为单位),精度为毫秒(1.11.4)

    • $status

      会话状态(1.11.4),可以是以下之一:

      • 200

        会话成功完成

      • 400

        无法解析客户端数据,例如 PROXY 协议头

      • 403

        禁止访问。例如,当某些客户端地址访问受限时

      • 500

        内部服务器错误

      • 502

        错误网关,例如,如果无法选择或到达上游服务器。

      • 503

        服务不可用,例如,当访问受连接数受限时

    • $time_iso8601

      本地时间采用 ISO 8601 标准格式

    • $time_local

      通用日志(Common Log)格式的本地时间