ngx_stream_log_module
模块(1.11.4)按指定的格式写入会话日志。
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time';
access_log /spool/logs/nginx-access.log basic buffer=32k;
- | 说明 |
---|---|
语法 | access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition] ;access_log off ; |
默认 | access_log off; |
上下文 | stream、server |
设置缓冲日志写入的路径、格式和配置。可以在同一级别指定多个日志。可通过在第一个参数中指定 syslog:
前缀来配置记录到 syslog。特殊值 off
取消当前级别的所有 access_log
指令。
如果使用 buffer
或 gzip
参数,则将缓冲 log 的写入。
缓冲区大小不得超过磁盘文件的原子写入大小。对于 FreeBSD 而言,这个大小是无限制的。
启用缓冲后,以下情况数据将写入文件:
flush
参数指定的数据如果使用 gzip
参数,将写入文件之前将压缩缓冲的数据。压缩级别可以设置为 1(最快,压缩级别低)到 9(最慢,压缩级别最高)之间。默认情况下,缓冲区大小等于 64K 字节,压缩级别设置为 1。由于数据是以原子块压缩,因此日志文件可以随时通过 zcat
解压缩或读取。
示例:
access_log /path/to/log.gz basic gzip flush=5m;
要使 gzip 压缩起作用,必须在构建 nginx 使用 zlib 库。
文件路径可以包含变量,但是这样的日志有一些约束:
valid
参数指定的时间内继续写入旧文件if
参数启用条件日志。如果 condition
计值为 0 或空字符串,则不会记录会话。
- | 说明 |
---|---|
语法 | log_format name [escape=default\|json\|none] string ... ; |
默认 | —— |
上下文 | stream |
指定日志格式,例如:
log_format proxy '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
escape
参数(1.11.8)允许在变量中设置转义的 json
或 default
字符,默认情况下,使用 default
转义。 none
参数(1.13.10)禁用转义。
- | 说明 |
---|---|
语法 | open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] ;open_log_file_cache off ; |
默认 | open_log_file_cache off; |
上下文 | stream、server |
定义一个缓存,用于存储名称中包含变量的常用日志的文件描述符。该指令有以下参数:
max
设置缓存中的最大描述符数,如果缓存变满,则最近最少使用(LRU)的描述符将被关闭
inactive
如果在此期间没有发生访问,则设置关闭缓存描述符的时间。默认为 10 秒
min_uses
设置在 inactive
参数定义的时间内文件使用的最小数量,使描述符在缓存中保持打开状态。默认为 1
valid
设置检查同名文件是否仍然存在的时间。默认为 60 秒
off
禁用缓存
用法示例:
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
http://nginx.org/en/docs/stream/ngx_stream_log_module.html
ngx_stream_proxy_module
模块(1.9.0)允许通过 TCP、UDP(1.9.13)和 UNIX 域套接字代理数据流。
server {
listen 127.0.0.1:12345;
proxy_pass 127.0.0.1:8080;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 1m;
proxy_pass example.com:12345;
}
server {
listen 53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns.example.com:53;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
- | 说明 |
---|---|
语法 | proxy_bind address [transparent] | off ; |
默认 | —— |
上下文 | stream、server |
提示 | 该指令在 1.9.2 版本中出现 |
使到被代理服务器的出站连接源自指定的本地 IP 地址(address
)。参数值可以包含变量(1.11.2)。特殊值 off
指定不继承上级 proxy_bind
指令配置,这使系统可以自动分配本地 IP 地址。
transparent
参数(1.11.0)允许到被代理服务器的出站连接源自非本地 IP 地址,例如,来自一个客户端的真实 IP 地址:
proxy_bind $remote_addr transparent;
为了使此参数生效,通常必须使用超级用户特权运行 nginx worker 进程。在 Linux上,如果指定了 transparent
则不需要(1.13.8),worker 进程从 master 进程继承 CAP_NET_RAW
能力。还需要配置内核路由表以拦截来自被代理服务器的网络流量。
- | 说明 |
---|---|
语法 | limit_conn_log_level size ; |
默认 | proxy_buffer_size 16k; |
上下文 | stream、server |
提示 | 该指令在 1.9.4 版本中出现 |
设置读取被代理服务器数据的缓冲区的大小(size
)。也用于设置读取客户端数据的缓冲区的大小(size
)。
- | 说明 |
---|---|
语法 | proxy_connect_timeout time ; |
默认 | proxy_connect_timeout 60s; |
上下文 | stream、server |
设置与被代理服务器建立连接的超时时间。
- | 说明 |
---|---|
语法 | proxy_download_rate rate ; |
默认 | proxy_download_rate 0; |
上下文 | stream、server |
提示 | 该指令在 1.9.3 版本中出现 |
限制读取被代理服务器数据的速率。rate
以每秒字节数指定。零值禁用速率限制。该限制是针对每个连接设置的,因此,如果 nginx 同时打开两个与被代理服务器的连接,则总速率将是指定限制速率的两倍。
参数值可以包含变量(1.17.0)。如果需要根据特定条件限制速率,可参考以下配置示例:
map $slow $rate {
1 4k;
2 8k;
}
proxy_download_rate $rate;
- | 说明 |
---|---|
语法 | proxy_next_upstream on | off ; |
默认 | proxy_next_upstream on; |
上下文 | stream、server |
当连接无法与某个被代理服务器建立连接时,是否将客户端连接传递给下一个服务器。
- | 说明 |
---|---|
语法 | proxy_next_upstream_timeout time ; |
默认 | proxy_next_upstream_timeout 0; |
上下文 | stream、server |
设置将连接传递到下一个服务器的超时时间。0
值关闭此限制。
- | 说明 |
---|---|
语法 | proxy_next_upstream_tries number ; |
默认 | proxy_next_upstream_tries 0; |
上下文 | stream、server |
设置将连接传递到下一个服务器的尝试次数。0
值关闭此限制。
- | 说明 |
---|---|
语法 | proxy_pass address ; |
默认 | —— |
上下文 | server |
设置被代理服务器的地址。该地址可以指定为一个域名或 IP 地址以及端口:
proxy_pass localhost:12345;
或作为 UNIX 域套接字路径:
proxy_pass unix:/tmp/stream.socket;
如果一个域名解析为多个地址,则所有这些地址都将以轮询的方式使用。另外,可以将地址指定为一个服务器组。
也可以使用变量(1.11.3)指定地址:
proxy_pass $upstream;
在这种情况下,在配置的服务器组中查找服务器名称,如果找不到,则使用一个 resolver确定服务器名称。
- | 说明 |
---|---|
语法 | proxy_protocol on | off ; |
默认 | proxy_protocol off; |
上下文 | stream、server |
提示 | 该指令在 1.9.2 版本中出现 |
为到被代理服务器的连接启用 PROXY 协议。
- | 说明 |
---|---|
语法 | proxy_requests number ; |
默认 | proxy_requests 0; |
上下文 | stream、server |
提示 | 该指令在 1.15.7 版本中出现 |
设置丢弃客户端和现有 UDP 流会话之间绑定的客户端数据报的数量。在收到指定数量的数据报后,来自同一客户端的下一个数据报将启动一个新会话。当所有客户端数据报都发送到被代理服务器并接收到预期的响应数时,或者达到超时时间时,会话将终止。
- | 说明 |
---|---|
语法 | proxy_responses number ; |
默认 | —— |
上下文 | stream、server |
提示 | 该指令在 1.9.13 版本中出现 |
如果使用 UDP 协议,设置响应客户端数据报中来自被代理服务器的数据报期望数。该数字用作会话终止的提示。默认情况下,数据报的数量不受限制。
如果指定零值,则不会响应。但如果收到响应并且会话仍未完成,则该响应将被处理。
- | 说明 |
---|---|
语法 | proxy_session_drop on | off ; |
默认 | proxy_session_drop off; |
上下文 | stream、server |
提示 | 该指令在 1.15.8 版本中出现 |
设置在将被代理服务器从组中删除或标记为永久不可用后,是否可以终止与被代理服务器的所有会话。在重新解析或使用了 API DELETE
命令时,可能会发生这种情况。如果服务器处于不健康状态或使用 API PATCH 命令修改,服务器可标记为永久不可用。当为客户端或被代理服务器处理下一个读取或写入事件时,每个会话都会终止。
该指令为商业订阅部分。
- | 说明 |
---|---|
语法 | proxy_socket_keepalive on | off ; |
默认 | proxy_socket_keepalive off; |
上下文 | stream、server |
提示 | 该指令在 1.15.6 版本中出现 |
为到被代理服务器的出站连接配置 TCP keepalive 行为。默认情况下,操作系统的设置影响到套接字。如果指令设置为 on
值,则将为套接字打开 SO_KEEPALIVE
套接字选项。
- | 说明 |
---|---|
语法 | proxy_ssl on | off ; |
默认 | proxy_ssl off; |
上下文 | stream、server |
为到被代理服务器的连接启用 SSL/TLS 协议。
- | 说明 |
---|---|
语法 | proxy_ssl_certificate file ; |
默认 | —— |
上下文 | stream、server |
指定一个 PEM 格式的证书文件,用于验证被代理服务器的身份。
- | 说明 |
---|---|
语法 | proxy_ssl_certificate_key file ; |
默认 | —— |
上下文 | stream、server |
指定一个 PEM 格式的私钥文件,用于验证被代理服务器的身份。
- | 说明 |
---|---|
语法 | proxy_ssl_ciphers ciphers ; |
默认 | proxy_ssl_ciphers DEFAULT; |
上下文 | stream、server |
指定连接到被代理服务器启用的密码算法。密码算法需要 OpenSSL 库支持。
可以使用 openssl ciphers
命令查看完整的算法支持列表。
- | 说明 |
---|---|
语法 | proxy_ssl_crl file ; |
默认 | —— |
上下文 | stream、server |
指定一个 PEM 格式的吊销证书(CRL)文件,用于验证被代理服务器的证书。
- | 说明 |
---|---|
语法 | proxy_ssl_name name ; |
默认 | proxy_ssl_name 来自 proxy_pass 的 host; |
上下文 | stream、server |
允许覆盖用于验证被代理服务器证书的服务器名称,并在与被代理服务器建立连接时通过 SNI 传递。也可以使用变量(1.11.3)指定服务器名称。
默认情况下,使用 proxy_pass 地址的主机部分。
- | 说明 |
---|---|
语法 | proxy_ssl_password_file file ; |
默认 | —— |
上下文 | stream、server |
指定一个保存有密钥密码的文件,每个密码独占一行。加载密钥时依次尝试使用这些密码。
- | 说明 |
---|---|
语法 | proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3] ; |
默认 | proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
上下文 | stream、server |
为到被代理服务器的连接启用指定协议。
- | 说明 |
---|---|
语法 | proxy_ssl_server_name on | off ; |
默认 | proxy_ssl_server_name off; |
上下文 | stream、server |
与被代理服务器建立连接时,启用或禁用通过 TLS 服务器名称指示扩展(SNI、RFC 6066)传递服务器名称。
- | 说明 |
---|---|
语法 | proxy_ssl_session_reuse on | off ; |
默认 | proxy_ssl_session_reuse on; |
上下文 | stream、server |
在使用被代理服务器时是否可以重用 SSL 会话。如果日志中出现错误 SSL3_GET_FINISHED:digest check failed
,请尝试禁用会话重用。
- | 说明 |
---|---|
语法 | proxy_ssl_trusted_certificate file ; |
默认 | —— |
上下文 | stream、server |
指定一个 PEM 格式的可信 CA 证书文件,该证书用于验证被代理服务器的证书。
- | 说明 |
---|---|
语法 | proxy_ssl_verify on | off ; |
默认 | proxy_ssl_verify off; |
上下文 | stream、server |
启用或禁用被代理服务器证书验证。
- | 说明 |
---|---|
语法 | proxy_ssl_verify_depth number ; |
默认 | proxy_ssl_verify_depth 1; |
上下文 | stream、server |
设置被代理服务器证书链验证深度。
- | 说明 |
---|---|
语法 | proxy_timeout timeout ; |
默认 | proxy_timeout 10m; |
上下文 | stream、server |
设置客户端或被代理服务器连接两次连续读取或写入操作之间的超时时间(timeout
)。如果在此时间内没有数据传输,则连接将关闭。
- | 说明 |
---|---|
语法 | proxy_upload_rate rate ; |
默认 | proxy_upload_rate 0; |
上下文 | stream、server |
提示 | 该指令在 1.9.3 版本中出现 |
限制读取客户端数据的速率。该速率以每秒字节数指定。零值禁用速率限制。该限制只针对单个连接,因此,如果客户端同时打开两个连接,则总速率将是指定限制速率的两倍。
参数值可以包含变量(1.17.0)。如果需要根据特定条件设置限制速率,可参考以下配置示例:
map $slow $rate {
1 4k;
2 8k;
}
proxy_upload_rate $rate;
http://nginx.org/en/docs/stream/ngx_stream_proxy_module.html