nginx中文文档-ngx_http_status_module

ngx_http_status_module模块提供访问多种状态信息。

该版本为商业版本。

示例配置

http {
    upstream backend {
        zone http_backend 64k;

        server backend1.example.com weight=5;
        server backend2.example.com;
    }

    proxy_cache_path /data/nginx/cache_backend keys_zone=cache_backend:10m;

    server {
        server_name backend.example.com;

        location / {
            proxy_pass  http://backend;
            proxy_cache cache_backend;

            health_check;
        }

        status_zone server_backend;
    }

    server {
        listen 127.0.0.1;

        location /upstream_conf {
            upstream_conf;
        }

        location /status {
            status;
        }

        location = /status.html {
        }
    }
}

stream {
    upstream backend {
        zone stream_backend 64k;

        server backend1.example.com:12345 weight=5;
        server backend2.example.com:12345;
    }

    server {
        listen      127.0.0.1:12345;
        proxy_pass  backend;
        status_zone server_backend;
        health_check;
    }
}

这个配置的示例状态请求:

http://127.0.0.1/status
http://127.0.0.1/status/nginx_version
http://127.0.0.1/status/caches/cache_backend
http://127.0.0.1/status/upstreams
http://127.0.0.1/status/upstreams/backend
http://127.0.0.1/status/upstreams/backend/peers/1
http://127.0.0.1/status/upstreams/backend/peers/1/weight
http://127.0.0.1/status/stream
http://127.0.0.1/status/stream/upstreams
http://127.0.0.1/status/stream/upstreams/backend
http://127.0.0.1/status/stream/upstreams/backend/peers/1
http://127.0.0.1/status/stream/upstreams/backend/peers/1/weight

默认配置中访问“/status.html”会输出简单的监控页面。需要将location“/status”和“/status.html”按如上方法配置。

status

语法:status
默认:—
上下文:location

从location访问状态信息。访问这个location应该有限制。

status_format

语法:status_format json
status_format jsonp [callback]
默认:status_format json
上下文:http, server, location

默认情况下,状态信息输出为JSON格式。
数据也可以输出为jsonp格式。callback参数指定了回调函数名。值可以包含变量。如果参数省略或是一个空字符串,会使用“ngx_status_jsonp_callback”。

status_zone

语法:status_zone zone
默认:—
上下文:server

启用收集在指定区域虚拟http或stream(1.7.11+)服务器状态信息。多个服务器可以共享相同的区域。

数据
提供下面的状态信息:

version
提供数据集的版本当前版本是6.

nginx_version
nginx版本。

address
接收状态请求的服务器地址。

generation
配置重新加载的总次数。

load_timestamp
最后一次重新加载配置文件的时间,从纪元开始的毫秒数。

timestamp
当前时间从纪元开始的毫秒数。

pid
处理状态请求的工作进程ID

processes
respawned
非正常结束和复位子线程的总数。

connections
accepted
接收客户端连接的总数。
dropped
丢弃客户端连接的总数。
active
当前活跃的客户端连接总数。
idle
当前空闲的客户端连接总数。

ssl
handshakes
成功的SSL握手总数。
handshakes_failed
失败的SSL握手总数。
session_reuses
SSL握手过程中重用的会话总数。

requests
total
客户端请求总数。
current
当前客户端请求数。

server_zones
对于每一个status_zone:
processing
当前处理的客户端请求数。
requests
从客户端收到的请求总数。
responses
total
发送给客户端的响应总数。
1xx, 2xx, 3xx, 4xx, 5xx
状态码1xx, 2xx, 3xx, 4xx和5xx的响应数。
discarded
没有发送响应的完成请求数。
received
从客户端收到的总字节数。
sent
发送到客户端的总字节数。

upstreams
peers
对每一个server,提供下面的数据:
id
服务器ID
server
服务器地址
backup
一个布尔值,表示服务器是否是备份服务器。
weight
服务器权重
state
当前状态,可能是“up”, “draining”, “down”, “unavail”或“unhealthy”
active
当前活动的连接数。
max_conns
服务器最大连接数。
requests
客户端转发到本服务器的总请求数。
responses
total
从服务器收到的响应的总数。
1xx, 2xx, 3xx, 4xx, 5xx
1xx, 2xx, 3xx, 4xx, 5xx状态码的请求数。
sent
发送到该服务器的总字节数。
received
从服务器接收到的总字节数。
fails
与该服务器通信的不成功尝试总数。
unavail
多少次服务器变成不可用状态(“unavail”状态),这是由于不成功的尝试次数达到了max_fails阈值。
health_checks
checks
健康检查请求总数。
fails
失败的健康检查数。
unhealthy
多少次服务器变成不健康状态。
last_passed
布尔值,表示最后一次健康检查请求是否成功且通过测试。
downtime
服务器在“unavail”和“unhealthy”状态的总时间。
downstart
服务器变为“unavail”或“unhealthy”状态的时间(从纪元开始的毫秒数)
selected
服务器最后一次被选中处理请求的时间(从纪元开始的毫秒数)
header_time
从服务器获取响应头的平均时间(1.7.10+)。当使用least_time方式的负载均衡时,该字段可用。
response_time
从服务器获取完整响应的平均时间(1.7.10+)。当使用least_time方式的负载均衡时,该字段可用。
keepalive
当前空闲的keepalive连接数。
queue
对于请求queue,提供下面的数据:
size
当前队列中的请求数。
max_size
同一时间队列中的最大请求数。
overflows
由于队列溢出拒绝的请求总数。

caches
size
当前缓存大小。
max_size
配置文件中指定的缓存大小最大限制。
cold
一个布尔值,表示“cache loader”进程是否仍在从磁盘加载数据到缓存。
hit, stale, updating, revalidated
responses
从缓存读取响应的总数。
bytes
从缓存读取的总字节数。
miss, expired, bypass
responses
没有从缓存取的响应总数。
bytes
从被代理服务器读取的字节总数。
responses_written
写入到缓存的响应总数。
bytes_written
写入到缓存的总字节数。

stream
server_zones
processing
当前处理的客户端连接数。
connections
从客户端接受的连接总数。
received
从客户端收到的字节总数。
sent
发送到客户端的字节总数。
upstreams
peers
id
服务器ID
server
服务器地址
backup
一个布尔值,表示服务器是否是备份服务器。
weight
服务器权重
state
当前状态,可能是“up”, “draining”, “down”, “unavail”或“unhealthy”
active
当前活动的连接数。
connections
转发到本服务器的客户端连接总数。
connect_time
连接上游服务器的平均时间。当使用least_time方式的负载均衡时,该字段可用。
first_byte_time
收到数据首字节平均时间。当使用least_time方式的负载均衡时,该字段可用。
response_time
收到数据最后一个字节平均时间。当使用least_time方式的负载均衡时,该字段可用。
sent
发送到该服务器的总字节数。
received
从服务器接收到的总字节数。
fails
与该服务器通信的不成功尝试总数。
unavail
多少次服务器变成不可用状态(“unavail”状态),这是由于不成功的尝试次数达到了max_fails阈值。
health_checks
checks
健康检查请求总数。
fails
失败的健康检查数。
unhealthy
多少次服务器变成不健康状态。
last_passed
布尔值,表示最后一次健康检查请求是否成功且通过测试。
downtime
服务器在“unavail”和“unhealthy”状态的总时间。
downstart
服务器变为“unavail”或“unhealthy”状态的时间(从纪元开始的毫秒数)
selected
服务器最后一次被选中处理请求的时间(从纪元开始的毫秒数)

兼容性

  • ssl状态在版本6中添加。
  • server_zones中的discarded字段在版本6中添加
  • queue状态数据在版本6中添加。
  • pid字段在版本6中添加。
  • upstreams中的服务器列表在版本6中移动到peers中。
  • 上游服务器的keepalive字段在版本5中移除。
  • stream状态数据在版本5中添加。
  • generation字段在版本5中添加。
  • processes中的respawned字段在版本5中添加。
  • upstreams中的header_time和response_time字段在版本5中添加。
  • upstreams中的selected字段在版本4中添加。
  • upstreams中的draining状态在版本4中添加。
  • upstreams中的id和max_conns字段在版本3中添加。
  • caches中的revalidated字段在版本3中添加。
  • server_zones, caches和load_timestamp状态数据在版本2中添加。

nginx中文文档-ngx_http_ssl_module

此页面版本:2016-06-08
ngx_http_ssl_module模块为HTTPS提供必要的支持,该模块默认不会构建,需要通过–with-http_ssl_module配置参数启用。该模块需要OpenSSL库。

示例配置
为减少处理器加载,建议:

  • 设置工作进程数等于处理器数
  • 启用keep-alive连接
  • 启用共享会话缓存
  • 禁用build-in会话缓存
  • 增加会话的有效期(默认是5分钟)
worker_processes auto;

http {

    ...

    server {
        listen              443 ssl;
        keepalive_timeout   70;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/nginx/conf/cert.pem;
        ssl_certificate_key /usr/local/nginx/conf/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        ...
    }

ssl

语法:ssl on | off
默认:ssl off
上下文:http, server

为给定的虚拟服务器启用HTTPS协议支持。
建议用listen指令的ssl参数替代这个指令。

ssl_buffer_size

语法:ssl_buffer_size size
默认:ssl_buffer_size 16k
上下文:http, server
版本:1.5.9+

设置发送数据缓冲区的大小。
默认,缓冲区大小为16k,对发送很大的响应消耗很小。为了减少首字节发送时间,可以用更小的值,例如:
ssl_buffer_size 4k;

ssl_certificate

语法:ssl_certificate file
默认:—
上下文:http, server

为给定的虚拟服务器指定一个PEM格式的证书文件。如果除初级证书之外还需要中级证书,它们需要在同一个文件中按如下顺序指定:先指定初级证书,然后是中级证书。PEM格式的密钥也需要放在同一个文件中。
从1.11.0版本开始,该指令可以指定多次加载不同的证书类型,例如RSA和ECDSA:

server {
    listen              443 ssl;
    server_name         example.com;

    ssl_certificate     example.com.rsa.crt;
    ssl_certificate_key example.com.rsa.key;

    ssl_certificate     example.com.ecdsa.crt;
    ssl_certificate_key example.com.ecdsa.key;

    ...
}

只有OpenSSL 1.0.2或更高版本支持为不同的证书分离证书链,老版本只能用一个证书链。
注意,由于HTTPS协议限制,虚拟服务器需要监听不同的IP地址:

server {
    listen          192.168.1.1:443;
    server_name     one.example.com;
    ssl_certificate /usr/local/nginx/conf/one.example.com.cert;
    ...
}

server {
    listen          192.168.1.2:443;
    server_name     two.example.com;
    ssl_certificate /usr/local/nginx/conf/two.example.com.cert;
    ...
}

否则第一个服务器证书将颁发给第二个网站。

ssl_certificate_key

语法:ssl_certificate_key file
默认:—
上下文:http, server

为给定的虚拟服务器指定PEM格式的密钥文件。可以使用engine:name:id值替代file(1.7.9+),从OpenSSL引擎name加载指定id的密钥。

ssl_ciphers

语法:ssl_ciphers ciphers
默认:ssl_ciphers HIGH:!aNULL:!MD5
上下文:http, server

指定可以使用的加密算法。加密算法为OpenSSL库可以理解的格式,例如:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
完整列表可以通过“openssl ciphers”命令查看。
之前版本的nginx默认使用不同的加密算法。

ssl_client_certificate

语法:ssl_client_certificate file
默认:—
上下文:http, server

指定一个PEM格式的可信CA证书文件,用于验证客户端证书,如果ssl_stapling启用,验证OCSP响应。
证书列表会发给客户端,如果不希望这样做,可以使用ssl_trusted_certificate指令。

ssl_crl

语法:ssl_crl file
默认:—
上下文:http, server
版本:0.8.7+

指定一个PEM格式的吊销证书列表文件,用于验证客户端证书。

ssl_dhparam

语法:ssl_dhparam file
默认:—
上下文:http, server
版本:0.7.2+

指定DHE算法DH参数的文件。

ssl_ecdh_curve

语法:ssl_ecdh_curve curve
默认:ssl_ecdh_curve auto
上下文:http, server
版本:1.1.0+,1.0.6+

为ECDHE算法指定curve。
当使用OpenSSL 1.0.2及更高版本时,可以指定多个curves,例如,
ssl_ecdh_curve prime256v1:secp384r1;
特殊值auto指示nginx在OpenSSL 1.0.2或更高版本时使用一个OpenSSL内建的列表,老版本使用prime256v1
在1.11.0版本以前,默认值是prime256v1。

ssl_password_file

语法:ssl_password_file file
默认:—
上下文:http, server
版本:1.7.3+

指定一个包含密钥密码的文件,每个密码占用一行,当加载密钥时会轮流尝试密码。
例子:

http {
    ssl_password_file /etc/keys/global.pass;
    ...

    server {
        server_name www1.example.com;
        ssl_certificate_key /etc/keys/first.key;
    }

    server {
        server_name www2.example.com;

        # named pipe can also be used instead of a file
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}

ssl_prefer_server_ciphers

语法:ssl_prefer_server_ciphers on | off
默认:ssl_prefer_server_ciphers off
上下文:http, server

当使用SSLv3和TLS协议时,指定服务器首选加密算法。

ssl_protocols

语法:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]
默认:ssl_protocols TLSv1 TLSv1.1 TLSv1.2
上下文:http, server

启用指定的协议。TLSv1.1和TLSv1.2参数只有在OpenSSL库大于等于1.0.1版本上可用。
TLSv1.1和TLSv1.2参数从1.1.13和1.0.12版本开始支持,所以当在OpenSSL版本大于等于1.0.1的老版本nginx上这些协议工作,但不能禁用。

ssl_session_cache

语法:ssl_session_cache off | none | [builtin[:size]] [shared:name:size]
默认:ssl_session_cache none
上下文:http, server

设置存储session参数的缓存类型和大小。缓存可以是下面任一类型:
off
严格禁止使用会话缓存:nginx明确的告知客户端会话不能重用。

none
使用会话缓存不允许:nginx告诉客户端会话可以重用,但是在缓存中并不存储会话参数。

builtin
缓存建立在OpenSSL中,只被一个工作进程使用。缓存大小在会话中指定。如果大小没有给出,等于20480个session。使用built-in缓存可以导致内存碎片。

shared
缓存在所有工作进程中共享。缓存大小指定为字节数,1M可以存储大约4000个会话。每个共享缓存应该有一个专门的名字。相同名字的缓存可以在多个虚拟服务器之间使用。

所有缓存类型都可以同时使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
不使用built-in缓存只用共享缓存更有效。

ssl_session_ticket_key

语法:ssl_session_ticket_key file
默认:—
上下文:http, server
版本:1.5.7+

设置带有密钥的文件用于加密解密TLS会话凭证。如果相同的密钥在多个服务器之间共享,这个指令是必要的。默认情况下,使用随机生成的密钥。
如果定义了几个秘钥,只有第一个秘钥会用于加密TLS会话凭证。这允许配置密钥轮询,例如:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

文件必须包含48字节的随机数据,可以用以下命令创建:
openssl rand 48 > ticket.key

ssl_session_tickets

语法:ssl_session_tickets on | off
默认:ssl_session_tickets on
上下文:http, server
版本:1.5.9+

启用或禁用重用会话。

ssl_session_timeout

语法:ssl_session_timeout time
默认:ssl_session_timeout 5m
上下文:http, server

指定一个时间,在这个期间内,客户端可以重用保存在缓存中的会话参数。

ssl_stapling

语法:ssl_stapling on | off
默认:ssl_stapling off
上下文:http, server
版本:1.3.7+

启用或禁用stapling of OCSP responses功能,例如:

ssl_stapling on;
resolver 192.0.2.1;

为了使OCSP stapling工作,服务器证书的颁发者应该熟知的。如果ssl_certificate文件不包含中级证书,服务器证书的颁发者需要出现在ssl_trusted_certificate文件中。
为了解析OCSP的主机名,resolver指令需要指定。

ssl_stapling_file

语法:ssl_stapling_file file
默认:—
上下文:http, server
版本:1.3.7+

当设置了此指令,OCSP响应会从指定的文件中取,而不是查询OCSP响应器指定的服务器证书。
这个文件需要DER格式,由“openssl ocsp”命令提供。

ssl_stapling_responder

语法:ssl_stapling_responder url
默认:—
上下文:http, server
版本:1.3.7+

覆盖OCSP响应器指定在“Authority Information Access”证书扩展项中的URL。
只有“http://”OCSP响应器被支持:
ssl_stapling_responder http://ocsp.example.com/;

ssl_stapling_verify

语法:ssl_stapling_verify on | off
默认:ssl_stapling_verify off
上下文:http, server
版本:1.3.7+

启用或启用服务器验证OCSP响应。
为了使验证工作,服务器证书颁发者,根证书以及所有中级证书需要使用ssl_trusted_certificate指令设置为可信。

ssl_trusted_certificate

语法:ssl_trusted_certificate file
默认:—
上下文:http, server
版本:1.3.7+

指定一个PEM格式的可信CA证书文件,用于验证客户端证书以及在ssl_stapling启用时验证OCSP响应。
与ssl_client_certificate设置的证书相比,这个证书列表不会发给客户端。

ssl_verify_client

语法:ssl_verify_client on | off | optional | optional_no_ca
默认:ssl_verify_client off
上下文:http, server

启用验证客户端证书。验证结果保存在$ssl_client_verify变量中。
optional参数(0.8.7+)请求客户端证书,如果证书存在则会验证它。
optional_no_ca参数(1.3.8+,1.2.5+)请求客户端证书,但是不需要由可信的CA证书签发。这个一般用于nginx外部服务实际去验证证书。证书的内容可以通过$ssl_client_cert变量访问。

ssl_verify_depth

语法:ssl_verify_depth number
默认:ssl_verify_depth 1
上下文:http, server

设置在客户端证书链中验证的深度。

错误处理
ngx_http_ssl_module模块支持一些非标准的错误码,可以用于重定向到error_page指令:
495
当客户端证书验证过程中出现错误。

496
客户端没有给出需要的证书。

497
一个常规的请求被发到了HTTPS端口。

重定向发生在请求完全解析后,变量如$request_uri, $uri, $args和其他的都可以使用。

内嵌变量
ngx_http_ssl_module模块支持一些内嵌变量:


$ssl_cipher
返回建立SSL连接使用的加密算法字符串。


$ssl_client_cert
返回PEM格式的客户端证书,用于建立SSL连接,除第一行外,每一行前面都有tab字符。这个用于proxy_set_header指令使用。


$ssl_client_fingerprint
返回客户端建立SSL连接的证书SHA1指纹(1.7.1+)。


$ssl_client_raw_cert
返回建立SSL连接时PEM格式的客户端证书。


$ssl_client_serial
返回建立SSL连接时PEM格式的客户端证书的序号。


$ssl_client_s_dn
返回建立SSL连接时PEM格式的客户端证书的“subject DN”字符串。


$ssl_client_i_dn
返回建立SSL连接时PEM格式的客户端证书的“issuer DN”字符串。


$ssl_client_verify
返回客户端证书验证结果:“SUCCESS”,“FAILED”以及当证书没有出现时的“NONE”。


$ssl_protocol
返回建立SSL连接时的协议。


$ssl_server_name
返回通过SNI查询的服务器名称(1.7.0+)。


$ssl_session_id
返回建立SSL连接的会话标识符。


$ssl_session_reused
如果SSL会话重用,返回“r”,否则为“.”(1.5.11+)。