admin 管理员组

文章数量: 887016

硬核!全网最全Nginx配置指令,建议收藏~

  • 1、前言
    • 1.1、Nginx配置文件各个主配置块说明
    • 1.2、Nginx配置符号参考
    • 1.3、本文出现的一些词汇介绍
  • 2、正文
    • 2.1、位于全局块的配置指令
    • 2.2、位于events块的配置指令
    • 2.3、位于http块的配置指令
      • 2.3.1、ngx_http_access_module模块
      • 2.3.2、ngx_http_addition_module模块
      • 2.3.3、ngx_http_auth_basic_module模块
      • 2.3.4、ngx_http_auth_request_module模块
      • 2.3.5、ngx_http_autoindex_module模块
      • 2.3.6、ngx_http_browser_module模块
      • 2.3.7、ngx_http_charset_filter_module模块
      • 2.3.8、ngx_http_copy_filter_module模块
      • 2.3.9、ngx_http_core_module模块
      • 2.3.10、ngx_http_dav_module模块
      • 2.3.11、ngx_http_degradation_module模块
      • 2.3.12、ngx_http_empty_gif_module模块
      • 2.3.13、ngx_http_fastcgi_module模块
      • 2.3.14、ngx_http_flv_module模块
      • 2.3.15、ngx_http_geoip_module模块
      • 2.3.16、ngx_http_geo_module模块
      • 2.3.17、ngx_http_grpc_module模块
      • 2.3.18、ngx_http_gunzip_filter_module模块
      • 2.3.19、ngx_http_gzip_filter_module模块
      • 2.3.20、ngx_http_gzip_static_module模块
      • 2.3.21、ngx_http_headers_filter_module模块
      • 2.3.22、ngx_http_image_filter_module模块
      • 2.3.23、ngx_http_index_module模块
      • 2.3.24、ngx_http_limit_conn_module模块
      • 2.3.25、ngx_http_limit_req_module模块
      • 2.3.26、ngx_http_log_module模块
      • 2.3.27、ngx_http_map_module模块
      • 2.3.28、ngx_http_memcached_module模块
      • 2.3.29、ngx_http_mirror_module模块
      • 2.3.30、ngx_http_mp4_module模块
      • 2.3.31、ngx_http_perl_module模块
      • 2.3.32、ngx_http_proxy_module模块
      • 2.3.33、ngx_http_random_index_module模块
      • 2.3.34、ngx_http_realip_module模块
      • 2.3.35、ngx_http_referer_module模块
      • 2.3.36、ngx_http_rewrite_module模块
      • 2.3.36、ngx_http_scgi_module模块
      • 2.3.37、ngx_http_secure_link_module模块
      • 2.3.38、ngx_http_slice_filter_module模块
      • 2.3.39、ngx_http_split_clients_module模块
      • 2.3.40、ngx_http_ssi_filter_module模块
      • 2.3.41、ngx_http_ssl_module模块
      • 2.3.42、ngx_http_stub_status_module模块
      • 2.3.43、ngx_http_sub_filter_module模块
      • 2.3.44、ngx_http_try_files_module模块
      • 2.3.45、ngx_http_upstream_module模块
      • 2.3.46、ngx_http_upstream_hash_module模块
      • 2.3.47、ngx_http_upstream_ip_hash_module模块
      • 2.3.48、ngx_http_upstream_keepalive_module模块
      • 2.3.49、ngx_http_upstream_least_conn_module模块
      • 2.3.50、ngx_http_upstream_random_module模块
      • 2.3.51、ngx_http_upstream_zone_module模块
      • 2.3.52、ngx_http_userid_filter_module模块
      • 2.3.53、ngx_http_uwsgi_module模块
      • 2.3.54、ngx_http_v2_module模块
      • 2.3.55、ngx_http_xslt_filter_module模块
    • 2.4、位于mail块的配置指令
      • 2.4.1、ngx_mail_auth_http_module模块
      • 2.4.2、ngx_mail_core_module模块
      • 2.4.3、ngx_mail_imap_module模块
      • 2.4.4、ngx_mail_pop3_module模块
      • 2.4.5、ngx_mail_proxy_module模块
      • 2.4.6、ngx_mail_smtp_module模块
      • 2.4.7、ngx_mail_ssl_module模块
    • 2.5、位于stream块的配置指令
      • 2.5.1、ngx_stream_access_module模块
      • 2.5.2、ngx_stream_core_module模块
      • 2.5.3、ngx_stream_geoip_module模块
      • 2.5.4、ngx_stream_geo_module模块
      • 2.5.5、ngx_stream_limit_conn_module模块
      • 2.5.5、ngx_stream_log_module模块
      • 2.5.6、ngx_stream_map_module模块
      • 2.5.7、ngx_stream_proxy_module模块
      • 2.5.8、ngx_stream_realip_module模块
      • 2.5.9、ngx_stream_return_module模块
      • 2.5.10、ngx_stream_split_clients_module模块
      • 2.5.11、ngx_stream_ssl_module模块
      • 2.5.12、ngx_stream_ssl_preread_module模块
      • 2.5.13、ngx_stream_upstream_module模块
      • 2.5.14、ngx_stream_upstream_hash_module模块
      • 2.5.15、ngx_stream_upstream_least_conn_module模块
      • 2.5.16、ngx_stream_upstream_random_module模块
      • 2.5.17、ngx_stream_upstream_zone_module模块

1、前言

1.1、Nginx配置文件各个主配置块说明

名称作用
全局块配置影响Nginx全局的指令
events块配置影响Nginx服务器或与用户的网络连接
http块可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
mail块配置请求的路由,以及各种页面的处理情况
stream块配置四层协议的转发、代理或者负载均衡等
表1-1 Nginx配置块介绍


1.2、Nginx配置符号参考

符号说明
k,K千字节
m,M兆字节
g,G千兆字节
表1-2 容量符号表

示例:“13k”、“9m”

符号说明
ms毫秒
s
m分钟
h小时
d
w
M一个月,30天
y年,365天
表1-3 时间符号表

示例:“1h20m"代表"1小时30分”,“2y7M"代表"2年零7个月”

1.3、本文出现的一些词汇介绍

符号说明
上下文用来表示该指令可以出现的区域
time代表时间,时间符号详见表2-2,如果不加时间符号则代表秒
file表示文件路径
prefixprefix是配置时设置的,${prefix} 默认为 /usr/local/nginx
number整型数
size代表文件大小,容量符号详见表2-1,默认不加容量符号则代表字节
path表示目录名
string普通字符串
rate单位是字节/秒,写法和size的格式是一样的
表1-4 符号解释


2、正文

2.1、位于全局块的配置指令

daemon

  • 语法: daemon on|off;
  • 默认: daemon on;
  • 上下文: 全局块
  • 说明: 是否以守护进程方式启动Nginx。

master_process

  • 语法: master_process on|off;
  • 默认: master_process on;
  • 上下文: 全局块
  • 说明: 是否启动worker进程。

timer_resolution

  • 语法: timer_resolution time;
  • 默认:
  • 上下文: 全局块
  • 说明: 通过减少工作进程中计时器的分辨率,从而减少 gettimeofday() 系统调用的次数。默认情况下,每次接收到内核事件时都会调用 gettimeofday()
    # 表示gettimeofday()调用间隔为1秒
    timer_resolution 100ms;
    
    # 表示gettimeofday()调用间隔为1秒
    timer_resolution 1;
    

pid

  • 语法: pid file;
  • 参数说明:
    • file – 可以是相对路径或绝对路径,相对路径最终形式为 ${prefix}/file,绝对路径最终形式为 file
  • 默认: pid ${prefix}/logs/nginx.pid;
  • 上下文: 全局块
  • 说明: 设置保存主进程PID的文件路径。
    pid logs/nginx.pid;
    

lock_file

  • 语法: lock_file file;
  • 参数说明:
    • file – 可以是相对路径或绝对路径,相对路径最终形式为 ${prefix}/file,绝对路径最终形式为 file
  • 默认: lock_file ${prefix}/logs/nginx.lock;
  • 上下文: 全局块
  • 说明: Nginx使用锁机制来实现accept_mutex和序列化访问共享内存。在大多数系统中,锁是使用原子操作实现的,所以这个指令会被忽略。而在那些使用“锁文件”机制的系统上,这个指令为锁文件的名称指定了一个前缀。
    lock_file logs/nginx.lock;
    

worker_processes

  • 语法: worker_processes number|auto;
  • 参数说明:
    • auto – 表示worker进程数等于当前的CPU个数
  • 默认: worker_processes 1;
  • 上下文: 全局块
  • 说明: 设置worker进程的个数。

debug_points

  • 语法: debug_points stop|abort;
  • 参数说明:
    • stop – 当进程出现异常时停止当前进程
    • abort – 当进程出现异常时产生一个coredump文件
  • 默认:
  • 上下文: 全局块
  • 说明: 该配置指令用于调试。

user

  • 语法: user user [group];
  • 参数说明:
    • group – 如果没有显式配置,将 user 的值赋给 group
  • 默认: user nobody nobody;
  • 上下文: 全局块
  • 说明: 设置worker进程所属的用户及组。
    user nobody;
    # 等同于
    user nobody nobody;
    

worker_priority

  • 语法: worker_priority [-]number;
  • 默认: worker_priority 1;
  • 上下文: 全局块
  • 说明: 设置worker进程的优先级(参考nice命令)。
    worker_priority 20;
    worker_priority -20;
    

worker_cpu_affinity

  • 语法: worker_cpu_affinity cpumask [cpumask…];
        worker_cpu_affinity auto [cpumask…];
  • 默认:
  • 上下文: 全局块
  • 说明: 将worker进程与特定的cpu进行绑定。
    # 用掩码来表示CPU,这里表示CPU0绑定到第一个worker进程,CPU1绑定到第二个worker进程,CPU3绑定到第三个worker进程,CPU4绑定到第四个worker进程
    worker_proceses     4;
    worker_cpu_affinity 0001 0010 0100 1000;
    
    # 这里表示CPU0和CPU2绑定到第一个worker进程,CPU1和CPU3绑定到第二个worker进程
    worker_proceses     2;
    worker_cpu_affinity 0101 1010;
    
    # 也可以使用自动绑定
    worker_proceses     atuo;
    worker_cpu_affinity atuo;
    
    # 指定被拿去自动绑定的CPU
    worker_proceses     atuo;
    worker_cpu_affinity atuo 01010101;
    

worker_rlimit_nofile

  • 语法: worker_rlimit_nofile number;
  • 默认:
  • 上下文: 全局块
  • 说明: 设置worker进程打开的最大文件描述述个数。
    worker_rlimit_nofile 2048;
    

worker_rlimit_core

  • 语法: worker_rlimit_core size;
  • 默认:
  • 上下文: 全局块
  • 说明: 设置worker进程生成的coredump文件的最大大小。
    worker_rlimit_core 512000;
    worker_rlimit_core 1000K;
    

worker_shutdown_timeout

  • 语法: worker_shutdown_timeout time;
  • 默认:
  • 上下文: 全局块
  • 说明: 配置工作进程正常关闭的超时时间。当时间到期时,Nginx将尝试关闭所有当前打开的连接。

working_directory

  • 语法: working_directory path;
  • 默认: working_directory ${prefix};
  • 上下文: 全局块
  • 说明: 设置worker进程的工作目录。
    working_directory /usr/local/nginx;
    

env

  • 语法: env variable[=value];
  • 默认: env TZ;
  • 上下文: 全局块
  • 说明: 默认情况下,Nginx会删除除了TZ变量之外从其父进程继承的所有环境变量。该指令允许保留一些继承的变量,改变它们的值或创建新的环境变量。
    env MALLOC_OPTIONS;
    env PERL5LIB=/data/site/modules;
    env OPENSSL_ALLOW_PROXY_CERTS=1;
    

ssl_engine

  • 语法: ssl_engine engine;
  • 默认:
  • 上下文: 全局块
  • 说明: 允许指定要使用的OpenSSL引擎,这需要环境支持更新版本的OpenSSL。
    # 可以使用以下命令查看当前环境支持的OpenSSL引擎
    openssl engine -time
    

google_perftools_profiles

  • 语法: google_perftools_profiles path;
  • 默认:
  • 上下文: 全局块
  • 说明: 该指令指定了Google Perftools分析器收集的概要文件的基本文件名,并且worker进程pid将被附加到指定的基本文件名。要使用此指令需在构建Nginx时加上配置选项: –with-google_perftools_module
    google_perftools_profiles /tmp/tcmalloc/;
    

pcre_jit

  • 语法: pcre_jit on|off;
  • 默认: pcre_jit off;
  • 上下文: 全局块
  • 说明: 使用pcre_jit优化正则表达式。要使用此指令需在构建Nginx时加上配置选项: –with-pcre-jit

thread_pool

  • 语法: thread_pool name threads=number [max_queue=number];
  • 参数说明:
    • name – 线程池名称
    • threads – 线程池中的最大线程数
    • max_queue – 允许在队列中等待的任务数
  • 默认: thread_pool default threads=32 max_queue=65536;
  • 上下文: 全局块
  • 说明: 定义线程池的名称和参数,用于多线程读取和发送文件,而不阻塞工作进程。如果池中的所有线程都忙,则新任务将在队列中等待。默认情况下,队列中最多可以等待65536个任务,当队列溢出时,任务完成并出错。

events

  • 语法: events {…}
  • 上下文: 全局块
  • 说明: 设置一个事件模块。
    events {
    	...
    }
    

http

  • 语法: http {…}
  • 上下文: 全局块
  • 说明: 设置一个HTTP模块。
    http {
    	...
    }
    

mail

  • 语法: mail {…}
  • 上下文: 全局块
  • 说明: 设置一个MAIL模块。要使用此指令需在构建Nginx时加上配置选项: –with-mail
    mail {
    	...
    }
    

stream

  • 语法: stream {…}
  • 上下文: 全局块
  • 说明: 设置一个STREAM模块。要使用此指令需在构建Nginx时加上配置选项: –with-stream
    stream {
    	...
    }
    

2.2、位于events块的配置指令

worker_connections

  • 语法: worker_connections number;
  • 默认: worker_connections 512;
  • 上下文: events块
  • 说明: 单个工作进程可以允许同时建立外部连接的数量。
    events {
    	worker_connections 10000;
    }
    

use

  • 语法: use event_module;
  • 参数说明:
    • event_module – 表示事件模型,可选项:select、poll、epoll、kqueue、/dev/poll、eventport
  • 默认:
  • 上下文: events块
  • 说明: 选择使用的事件模型。一般不用自己设置,因为Nginx会默认使用当前平台下最高效合适的事件模型。

multi_accept

  • 语法: multi_accept on|off;
  • 默认: multi_accept off;
  • 上下文: events块
  • 说明: 如果multi_accept被禁用,工作进程将一次接受一个新连接,否则,工作进程将一次接受所有新连接。
    events {
    	multi_accept on;
    }
    

accept_mutex

  • 语法: accept_mutex on|off;
  • 默认: accept_mutex off;
  • 上下文: events块
  • 说明: 使用互斥锁进行顺序的 accept() 系统调用,避免惊群。以前的版本中这个是默认开启的,但是后来Linux内核自己解决了 accept() 的惊群问题,就不需要使用这个了。
    events {
    	accept_mutex off;
    }
    

accept_mutex_delay

  • 语法: accept_mutex_delay time;
  • 默认: accept_mutex_delay 500ms;
  • 上下文: events块
  • 说明: 如果启用了accept_mutex,该指令将指定工作进程重新尝试获取互斥锁的延迟时间。
    events {
    	accept_mutex_delay 1s;
    }
    

debug_connection

  • 语法: debug_connection ip|CIDR|unix:;
  • 默认:
  • 上下文: events块
  • 说明: 为选定的客户端连接启用调试日志,其它连接将使用由error_log指令设置的日志记录级别。调试连接由IPv4、IPv6地址或网络指定,也可以使用主机名指定连接,对于使用UNIX域套接字的连接,调试日志由"unix:"参数启用。要使用此指令需在构建Nginx时加上配置选项: –with-debug
    events {
    	debug_connection 127.0.0.1;
    	debug_connection localhost;
    	debug_connection 192.0.2.0/24;
    	debug_connection ::1;
    	debug_connection 2001:0db8::/32;
    	debug_connection unix:;
    }
    

worker_aio_requests

  • 语法: worker_aio_requests number;
  • 默认: worker_aio_requests 32;
  • 上下文: events块
  • 说明: 将aio与epoll连接处理方法一起使用时,为单个工作进程设置未完成的异步I/O操作的最大数目。
    events {
    	worker_aio_requests 64;
    }
    

2.3、位于http块的配置指令

2.3.1、ngx_http_access_module模块

allow

  • 语法: allow address|CIDR|unix:|all;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的limit_except块
  • 说明: 表示描述的网络地址有权直接访问。如果指定unix:,则允许所有UNIX域套接字的访问。注意:allow和deny的规则是按顺序执行的。

deny

  • 语法: deny address|CIDR|unix:|all;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的limit_except块
  • 说明: 表示描述的网络地址将被拒绝访问。如果指定unix:,则将拒绝所有UNIX域套接字的访问。注意:allow和deny的规则是按顺序执行的。
    # 在下面的例子中,仅允许网段 10.1.1.0/16 和 192.168.1.0/24 中除 192.168.1.1 之外的ip访问
    http {
    	deny    192.168.1.1;
    	allow   192.168.1.0/24;
    	allow   10.1.1.0/16;
    	deny    all;
    }
    

2.3.2、ngx_http_addition_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_addition_module

add_before_body

  • 语法: add_before_body uri;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在回复正文的最前面加入一段文字,Nginx会发起一个子请求去获取这些文字。空字符串作为参数时会取消从先前配置级别继承的添加。

add_after_body

  • 语法: add_after_body uri;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在回复正文的最后面加入一段文字,Nginx会发起一个子请求去获取这些文字。空字符串作为参数时会取消从先前配置级别继承的添加。

addition_types

  • 语法: addition_types mime-type [mime-type …];
  • 默认: addition_types text/html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在响应中回复的MIME类型。默认始终包含 text/html。如果设置类型为"*",就会匹配任何MIME类型。
    # 对于如下配置,客户端在请求index.html文件之后,发送给它的是依次是before.html、index.html、after.html,是整合为一个body的
    http {
    	server {
    		listen 80;
    		
    		location / {
    			root html;
    			addition_types text/html;
    			add_before_body /before.html;
    			add_after_body /after.html;
    			index index.html;
    		}
    	}
    }
    

2.3.3、ngx_http_auth_basic_module模块

auth_basic

  • 语法: auth_basic string|off;
  • 默认: auth_basic off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的limit_except块
  • 说明: 启用使用“HTTP基本身份验证”协议验证用户名和密码。指定的参数用作 realm,并且参数值可以包含变量。特殊值off表示取消从上一个配置级别继承的auth_basic指令的影响。

auth_basic_user_file

  • 语法: auth_basic_user_file file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的limit_except块
  • 说明: 指定保存用户名和密码的文件。
    http {
    	server {
    		listen 80;
    		
    		location / {
    			auth_basic           "gude";
    			auth_basic_user_file conf/htpasswd;
    
    			root html;
    			index index.html;
    		}
    	}
    }
    

2.3.4、ngx_http_auth_request_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_auth_request_module

auth_request

  • 语法: auth_request uri|off;
  • 默认: auth_request off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 根据子请求的结果启用授权并设置子请求将发送到指定的URI。
    http {
    	server {
    		location /private/ {
    			auth_request /auth;
    			...
    		}
    
    		location = /auth {
    			...
    		}
    	}
    }
    

auth_request_set

  • 语法: auth_request_set $variable value;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在授权请求完成后,将请求变量设置为给定值。该值可能包含来自授权请求的变量,例如 $upstream_http.*

2.3.5、ngx_http_autoindex_module模块

autoindex

  • 语法: autoindex on|off;
  • 默认: autoindex off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 开启或关闭目录列表输出功能。

autoindex_format

  • 语法: autoindex_format html|json|jsonp|xml;
  • 默认: autoindex_format html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置回显文件格式。

autoindex_localtime

  • 语法: autoindex_localtime on|off;
  • 参数说明:
    • on – 表示显示的是服务器时间
    • off – 表示显示的是GMT时间
  • 默认: autoindex_localtime off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置目录中列出的文件时间是服务器时间还是GMT时间。

autoindex_exact_size

  • 语法: autoindex_exact_size on|off;
  • 参数说明:
    • on – 表示显示的是精确大小,单位为字节
    • off – 表示显示的带容量单位的粗略时间
  • 默认: autoindex_exact_size on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置目录中列出的文件是显示精确大小,还是对KB,MB,GB进行四舍五入。
    http {
    	server {
    		listen 80;
    		
    		location /autoindex {
    			alias /home/bifang/src;
    			autoindex on;
    			autoindex_format html;
    			autoindex_localtime on;
    			autoindex_exact_size off;
    		}
    	}
    }
    

2.3.6、ngx_http_browser_module模块

modern_browser

  • 语法: modern_browser browser version;
        modern_browser unlisted;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个版本,此版本及后续版本的浏览器都被认定为新式浏览器。浏览器可以是下列之一:msie、gecko(基于Mozilla)、opera、safari或者konqueror。版本可被指定为以下形式:X、X.X、X.X.X 或 X.X.X.X。每一形式的最大值分别是4000、4000.99、4000.99.99和4000.99.99.99。当浏览器既没有在modern_browser中列出,又没有在ancient_browser中列出时,如果配置了特殊值unlisted,那么浏览器将被认定为新式浏览器,否则认定为旧式浏览器。如果请求头中没有"User-Agent"域,浏览器以没有列出对待。

ancient_browser

  • 语法: ancient_browser string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果任一指定的子串在请求头的"User-Agent"域中被发现,浏览器将被认定为旧式浏览器。特殊字符串"netscape4"相当于正则表达式"^Mozilla/[1-4]"。

modern_browser_value

  • 语法: modern_browser_value string;
  • 默认: modern_browser_value 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设定变量 $modern_browser 的值。

ancient_browser_value

  • 语法: ancient_browser_value string;
  • 默认: ancient_browser_value 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设定变量 $ancient_browser 的值。如果浏览器被为识别为新式浏览器, $modern_browser 被设置为modern_browser_value指令设置的值;如果浏览器被识别为旧式浏览器, $ancient_browser 被设置为ancient_browser_value指令设置的值;如果浏览器被识别为任何版本的MSIE, $msie 被设置为"1"。
    # 为指定的浏览器版本指定index页面
    http {
    	server {
    		listen 80;
    		
    		location / {
    			modern_browser_value "modern.";
    			
    			modern_browser msie      5.5;
    			modern_browser gecko     1.0.0;
    			modern_browser opera     9.0;
    			modern_browser safari    413;
    			modern_browser konqueror 3.0;
    			
    			root /usr/local/nginx/html/browser/;
    			
    			index index.${modern_browser}html index.html;
    		}
    	}
    }
    
    # 引导旧式浏览器重定向到指定页面
    http {
    	server {
    		listen 80;
    		
    		location / {
    			modern_browser msie 5.0;
    			
    			modern_browser gecko 0.9.1;
    			modern_browser opera 8.0;
    			modern_browser safari 413;
    			modern_browser konqueror 3.0;
    			
    			modern_browser unlisted;
    			ancient_browser Links Lynx Netscape4;
    			
    			if ($ancient_browser){
    			  rewrite  ^  /ancient.html;
    			}
    		}
    	}
    }
    

2.3.7、ngx_http_charset_filter_module模块

charset

  • 语法: charset charset|off;
  • 默认: charset off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 为响应头的"Content-Type"添加指定的字符集。如果这个字符集和source_charset指令设置的字符集不同,就会进行转换。参数off表明不在响应头的"Content-Type"中添加字符集。字符集可以当作变量来定义:charset $charset; 这种情况下,一个变量所有可能的值,至少使用charset_map charset或者source_charset指令中的一种来配置。对于utf-8、windows-1251和koi8-r字符集,在配置中包含conf/koi-win、conf/koi-utf和conf/win-utf这些文件就足够了。对于其它字符集,简单地做一个虚构转换表就可以了, 比如:charset_map iso-8859-5 _ { } 。此外,字符集也可以在响应头的"X-Accel-Charset"中设置。

source_charset

  • 语法: source_charset charset;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 定义响应中的原始字符集,如果这个字符集和charset指令设置字符集的不同,就会进行转换。
    # 转换表示例
    http {
    	include        conf/koi-win;
    	
    	charset        windows-1251;
    	source_charset koi8-r;
    }
    

override_charset

  • 语法: override_charset on|off;
  • 默认: override_charset off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 对于接收到的代理服务器或者FastCGI服务器的响应头中"Content-Type"已经带有字符集的情况,确定是否进行字符集转换。如果开启转换,接收到的响应中指定的字符集会被当作原始字符集。需要注意的是,如果在子请求中接收到的应答,始终会将应答的字符集转换为主请求的字符集,无论override_charset指令是否开启。

charset_types

  • 语法: charset_types mime-type [mime-type …];
  • 默认: charset_types text/html text/xml text/plain text/vnd.wap.wml application/x-javascript application/rss+xml;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 使模块在响应时能处理除了"text/html"之外其他指定的MIME类型。特殊值"*"表示匹配任意的MIME类型。

charset_map

  • 语法: charset_map charset1 charset2 {…};
  • 默认:
  • 上下文: http块
  • 说明: 描述了从一个字符集到另一个字符集的转换表。发行文件conf/koi-win、conf/koi-utf以及conf/win-utf中已经提供了从koi8-r到windows-1251、从koi8-r到utf-8以及从windows-1251到utf-8的完整转换表。
    # 转换表示例如下
    http {
    	charset_map koi8-r utf-8 {
    		C0 D18E ;
    		C1 D0B0 ;
    		C2 D0B1 ;
    		C3 D186 ;
    		...
    	}
    }
    

2.3.8、ngx_http_copy_filter_module模块

output_buffers

  • 语法: output_buffers number size;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于从磁盘读取响应信息的缓冲区的数量和大小。
    http {
    	server {
    		output_buffers 1 32k;
    	}
    }
    

2.3.9、ngx_http_core_module模块

variables_hash_max_size

  • 语法: variables_hash_max_size size;
  • 默认: variables_hash_max_size 1024;
  • 上下文: http块
  • 说明: 设置变量哈希表的最大容量。

variables_hash_bucket_size

  • 语法: variables_hash_bucket_size size;
  • 默认: variables_hash_bucket_size 64;
  • 上下文: http块
  • 说明: 设置变量哈希桶的容量。

server_names_hash_max_size

  • 语法: server_names_hash_max_size size;
  • 默认: server_names_hash_max_size 512;
  • 上下文: http块
  • 说明: 设置主机名哈希表的最大容量。

server_names_hash_bucket_size

  • 语法: server_names_hash_bucket_size size;
  • 默认: server_names_hash_bucket_size 32|64|128;
  • 上下文: http块
  • 说明: 设置主机名哈希桶的容量,其默认值取决于处理器的缓存行的大小。

server

  • 语法: server {…}
  • 上下文: http块
  • 说明: 设置一个属于http块的server块。
    http {
    	server {
    		...
    	}
    }
    

connection_pool_size

  • 语法: connection_pool_size size;
  • 默认: connection_pool_size 256|512;
  • 上下文: http块、http块中的server块
  • 说明: 允许精确调整每个连接的内存分配。该指令对性能的影响很小,一般不应使用。默认情况下,在32位平台上等于256字节,在64位平台上等于512字节。

request_pool_size

  • 语法: request_pool_size size;
  • 默认: request_pool_size 4k;
  • 上下文: http块、http块中的server块
  • 说明: 允许准确调整每个请求的内存分配。该指令对性能的影响很小,一般不应使用。

client_header_timeout

  • 语法: client_header_timeout time;
  • 默认: client_header_timeout 60s;
  • 上下文: http块、http块中的server块
  • 说明: 定义读取客户端请求头部的超时时间。如果客户端在这段时间内没有传送完整个头部,Nginx将返回错误408(Request Time-out)到客户端。

client_header_buffer_size

  • 语法: client_header_buffer_size size;
  • 默认: client_header_buffer_size 1k;
  • 上下文: http块、http块中的server块
  • 说明: 设置读取客户端请求头部的缓冲区大小。对于大多数请求,1K的缓冲区就足够了。但是,如果请求包含长cookie或来自WAP客户端,1K可能不太够。如果请求行或请求头字段不适合此缓冲区,则分配由large_client_header_buffers指令配置的更大缓冲区。

large_client_header_buffers

  • 语法: large_client_header_buffers number size;
  • 默认: large_client_header_buffers 4 8k;
  • 上下文: http块、http块中的server块
  • 说明: 设置读取客户端超大请求的缓冲区的数量和每块缓冲的容量。HTTP请求行的长度不能超过一块缓冲的容量,否则Nginx返回错误414(Request-URI Too Large)到客户端。每个请求头的长度也不能超过一块缓冲的容量,否则Nginx返回错误400(Bad Request)到客户端。缓冲区仅在需要时才分配,默认每块的容量是8K字节。如果在请求处理结束后连接转换为保持活动状态,则这些缓冲区将被释放。

ignore_invalid_headers

  • 语法: ignore_invalid_headers on|off;
  • 默认: ignore_invalid_headers on;
  • 上下文: http块、http块中的server块
  • 说明: 控制是否忽略非法的请求头字段名。合法的名字是由英文字母、数字和连字符组成,当然也可以包含下划线。本指令可以在默认虚拟主机的server配置层级中定义一次,那么这个值在监听在相同地址和端口的所有虚拟主机上都生效。

merge_slashes

  • 语法: merge_slashes on|off;
  • 默认: merge_slashes on;
  • 上下文: http块、http块中的server块
  • 说明: 开启或者关闭将请求URI中相邻两个或更多斜线合并成一个的功能。
    # 关闭该功能之后请求"//html/index.html"将不能匹配以下内容
    http {
    	merge_slashes ff;
    	
    	location /html/ {
    		...
    	}
    }
    

underscores_in_headers

  • 语法: underscores_in_headers on|off;
  • 默认: underscores_in_headers off;
  • 上下文: http块、http块中的server块
  • 说明: 启用或禁用在客户端请求头中使用下划线。如果禁止,含有下划线的请求头将被标志为非法请求头并接受ignore_invalid_headers指令的处理。可以在默认主机的server配置级别定义此命令。这样,指令设置将覆盖监听同一地址和端口的所有虚拟主机。

location

  • 语法: location [=||*|^~] uri {…}
        location @name {…}
  • 参数说明:
    • = – 该修饰符表示定义的URI和location进行精确匹配,如果找到完全匹配,则搜索终止。例如,如果"/"请求频繁发生,定义"location = /"将加快这些请求的处理速度,因为搜索在第一次比较后立即终止,这样的location显然不能进行嵌套包含另一个location的
    • ~ – 该修饰符表示区分大小的匹配
    • ~* – 该修饰符表示不区分大小的匹配
    • ^~ – 该修饰符表示如果把这个前缀用于一个常规字符串,那么告诉Nginx如果路径匹配那么不测试正则表达式
  • 上下文: http块中的server块、http块中的location块
  • 说明: 设置一个location模块。
    location = / {
    	[ A ]
    }
    
    location / {
    	[ B ]
    }
    
    location /documents/ {
    	[ C ]
    }
    
    location ^~ /images/ {
    	[ D ]
    }
    
    location ~* \.(gif|jpg|jpeg)$ {
    	[ E ]
    }
    # 对于上述配置,"/"请求匹配A,"/index.html"请求匹配B,"/documents/document.html"请求匹配C,
    # "/images/1.gif"请求匹配配置D,"/documents/1.jpg"请求匹配配置E。
    

listen

  • 语法: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
        listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
        listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  • 默认: listen *:80 | *:8000;
  • 上下文: http块中的server块
  • 说明: 设置Nginx监听地址,Nginx从这里接受请求。对于IP协议,这个地址就是address和port;对于UNIX域套接字协议,这个地址就是path。一条listen指令只能指定一个address或者por,当然address也可以是主机名。
    http {
    	server {
    		# IPv4
    		listen 127.0.0.1:80;
    		listen 127.0.0.1;
    		listen 80;
    		listen *:80;
    		listen localhost:80;
    		
    		# IPv6
    		listen [::]:80;
    		listen [fe80::1];
    		
    		# UNIX
    		listen unix:/usr/local/nginx/logs/nginx.sock;
    	}
    }
    

server_name

  • 语法: server_name name [name …];
  • 默认: server_name “”;
  • 上下文: http块中的server块
  • 说明: 设置虚拟主机名。
    # 以下示例中bifang为主服务器名称
    http {
    	server {
    		server_name bifang www.bifang;
    	}
    }
    

types_hash_max_size

  • 语法: types_hash_max_size size;
  • 默认: types_hash_max_size 1024;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置类型哈希表的最大容量。

types_hash_bucket_size

  • 语法: types_hash_bucket_size size;
  • 默认: types_hash_bucket_size 64;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置类型哈希桶的容量。

types

  • 语法: types {…}
  • 默认: types {
          text/html html;
          image/gif gif;
          image/jpeg jpg;
        }
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置文件扩展名和响应的MIME类型的映射表,可以将多个扩展名映射到同一种类型。随Nginx发行的conf/mime.types文件中包含了足够全面的映射表,一般不用自己搞这些。
    http {
    	types {
    		video/3gpp    3gpp 3gp;
    		video/mp2t    ts;
    		video/mp4     mp4;
    		video/mpeg    mpeg mpg;
    	}
    }
    

default_type

  • 语法: default_type mime-type;
  • 默认: default_type text/plain;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义响应的默认MIME类型。

root

  • 语法: root path;
  • 默认: root html;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 为请求设置根目录。文件路径的构造仅仅是将URI拼在root指令的值后面,如果需要修改URI,应该使用alias指令。
    # /autoindex/test.txt 将由 /home/src/autoindex/test.txt 文件来响应。
    http {
    	server {
    		location /autoindex {
    				root /home/src;
    			}
    	}
    }
    

alias

  • 语法: alias path;
  • 默认:
  • 上下文: http块中的location块
  • 说明: 定义指定路径的替换路径。
    # /autoindex/test.txt 将由 /home/src/test.txt 文件来响应
    http {
    	server {
    		location /autoindex {
    				alias /home/src;
    			}
    	}
    }
    

limit_except

  • 语法: limit_except method [method …] {…}
  • 默认:
  • 上下文: http块中的location块
  • 说明: 允许按请求的HTTP方法限制对某路径的请求。method用于指定不由这些限制条件进行过滤的HTTP方法,可选值有GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK和PATCH。指定method为GET方法的同时,Nginx会自动添加HEAD方法。
    # 以下示例将对除GET和HEAD方法以外的所有HTTP方法的请求进行访问限制
    http {
    	server {
    		location / {
    			limit_except GET {
    				allow 192.168.31.1;
    				deny  all;
    			}
    		}
    	}
    }
    

client_max_body_size

  • 语法: client_max_body_size size;
  • 参数说明:
    • size – 设置为0时可以使Nginx不检查客户端请求正文的长度
  • 默认: client_max_body_size 1m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置允许客户端请求正文的最大长度,请求的长度由"Content-Length"请求头指定。如果请求的长度超过设定值,Nginx将返回错误413(Request Entity Too Large)到客户端。

client_body_buffer_size

  • 语法: client_body_buffer_size size;
  • 默认: client_body_buffer_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置读取客户端请求正文的缓冲容量,如果请求正文大于缓冲容量,整个正文或者正文的一部分将写入临时文件。

client_body_timeout

  • 语法: client_body_timeout time;
  • 默认: client_body_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义读取客户端请求正文的超时。超时是指相邻两次读操作之间的最大时间间隔,而不是整个请求正文完成传输的最大时间。如果客户端在这段时间内没有传输任何数据,Nginx将返回408(Request Time-out)错误到客户端。

client_body_temp_path

  • 语法: client_body_temp_path path [level1 [level2 [level3]]];
  • 默认: client_body_temp_path client_body_temp;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义存储客户端请求正文的临时文件的目录,支持在指定目录下多达3层的子目录结构。
    # 对于以下配置,临时文件可能为:/usr/local/nginx/client_temp/3/18/00000123456
    http {
    	client_body_temp_path /usr/local/nginx/client_temp 1 2;
    }
    

client_body_in_file_only

  • 语法: client_body_in_file_only on|clean|off;
  • 参数说明:
    • on – 表示请求处理结束后不会删除临时文件
    • clean – 表示请求处理结束后会删除临时文件
  • 默认: client_body_in_file_only off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 决定Nginx是否将客户端请求正文整个写入文件。这条指令在调试、使用 $request_body_file 变量或者使用ngx_http_perl_module模块的 $r->request_body_file 方法时都可以使用。

client_body_in_single_buffer

  • 语法: client_body_in_single_buffer on|off;
  • 默认: client_body_in_single_buffer off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 决定是否将Nginx将整个客户端请求正文保存在一块缓冲中。

sendfile

  • 语法: sendfile on|off;
  • 默认: sendfile off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 启用或禁用 sendfile()

sendfile_max_chunk

  • 语法: sendfile_max_chunk size;
  • 默认: sendfile_max_chunk 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置为非0值时,可以限制在一次 sendfile() 调用时传输的数据量。如果不进行限制,一个快速的连接可能会霸占整个worker进程的所有资源。

subrequest_output_buffer_size

  • 语法: subrequest_output_buffer_size size;
  • 默认: subrequest_output_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于存储子请求响应主体的缓冲区的大小。默认情况下,缓冲区大小等于一页内存,即4K或8K,具体取决于平台。

aio

  • 语法: aio on|off|sendfile;
  • 默认: aio off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或者禁用异步文件I/O(AIO)。

aio_write

  • 语法: aio_write on|off;
  • 默认: aio_write off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果启用了aio,则指定是否将其用于写入文件。

read_ahead

  • 语法: read_ahead size;
  • 默认: read_ahead 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置内核参数,控制文件预读的数量。在Linux上无效。

directio

  • 语法: directio size|off;
  • 默认: directio off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当读入长度大于等于指定size的文件时,开启DirectIO功能。它在处理大文件或者在Linux系统使用aio时比较有用。

directio_alignment

  • 语法: directio_alignment size;
  • 默认: directio_alignment 512;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为directio设置文件偏移量对齐。

tcp_nopush

  • 语法: tcp_nopush on|off;
  • 默认: tcp_nopush off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在Linux上使用TCP_CORK套接字选项,选项仅在使用sendfile的时候才开启。开启此选项允许在Linux上将响应头和正文的开始部分一起发送或一次性发送整个文件。

tcp_nodelay

  • 语法: tcp_nodelay on|off;
  • 默认: tcp_nodelay on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用TCP_NODELAY选项。当连接转变为长连接或upstream发送响应到客户端时启用该选项。此外,它还在SSL连接、无缓冲代理和WebSocket代理上启用。

send_timeout

  • 语法: send_timeout time;
  • 默认: send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置向客户端传输响应的超时时间。超时仅指两次相邻写操作之间的时间间隔,而非整个响应的传输时间。如果客户端在这段时间中没有收到任何数据,连接将关闭。

send_lowat

  • 语法: send_lowat size;
  • 默认: send_lowat 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果设置成非0值,Nginx将尝试最小化向客户端发送数据的次数。在Linux中改配置无效。

postpone_output

  • 语法: postpone_output size;
  • 参数说明:
    • size – 为0表示关闭推迟发送的功能
  • 默认: postpone_output 1460;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果可能,到客户端的数据将被推迟发送,直到Nginx需要发送的数据至少有size字节。

limit_rate

  • 语法: limit_rate rate;
  • 参数说明:
    • rate – 为0表示不限速
  • 默认: limit_rate 0;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 限制向客户端传送响应的速率限制。Nginx按连接限速,所以如果某个客户端同时开启了两个连接,那么客户端的整体速率是这条指令设置值的2倍。

limit_rate_after

  • 语法: limit_rate_after size;
  • 默认: limit_rate_after 0;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 当传输量大于size时,超出部分将限速传送。

keepalive_timeout

  • 语法: keepalive_timeout timeout [header_timeout];
  • 默认: keepalive_timeout 75s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 第一个参数设置客户端的长连接在服务器端保持的最长时间(在此时间客户端未发起新请求,则长连接关闭),第二个参数为可选项,设置"Keep-Alive: timeout=time"响应头的值。

keepalive_requests

  • 语法: keepalive_requests number;
  • 默认: keepalive_requests 100;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置通过一个长连接可以处理的最大请求数,请求数超过此值,长连接将关闭。

keepalive_disable

  • 语法: keepalive_disable none|browser [browser …];
  • 默认: keepalive_disable msie6;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 针对行为异常的浏览器关闭长连接功能,browser参数指定那些浏览器会受到影响。值为msie6表示在遇到POST请求时,关闭与老版MSIE浏览器建立长连接。值为safari表示在遇到MacOS X和类MacOS X操作系统下的Safari浏览器和类Safari浏览器时,不与浏览器建立长连接。值为none表示为所有浏览器开启长连接功能。

satisfy

  • 语法: satisfy all|any;
  • 默认: satisfy all;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: Nginx进行访问限制的有ngx_http_access_module模块、ngx_http_auth_basic_module模块、ngx_http_auth_request_module模块和ngx_http_auth_jwt_module模块。本指令设置成all时,表示只有当所有模块的所有限制条件(写入配置的)都授权访问时,允许请求访问;设置成any时,表示如果当任意模块的任意限制条件授权访问时,允许请求访问。

auth_delay

  • 语法: auth_delay time;
  • 默认: auth_delay 0s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当访问受密码、子请求结果或JWT限制时,使用401响应代码延迟处理未经授权的请求,以防止计时攻击。

internal

  • 语法: internal;
  • 默认:
  • 上下文: http块中的location块
  • 说明: 指定一个路径是否只能用于内部访问。如果是外部访问,客户端将收到404(Not Found)错误。内部请求如下:
    1. 由error_page、index、random_index和try_files指令重定向的请求
    2. 来自上游服务器的"X-Accel-Redirect"响应头字段重定向的请求
    3. 由ngx_http_ssi_module模块的"include virtual"命令、ngx_http_addition_modul模块指令以及auth_request和mirror指令形成的子请求
    4. 由rewrite指令更改的请求。
    # 每个请求有10个内部重定向的限制,以防止在不正确的配置中可能发生的请求处理周期。如果达到此限制,则返回错误500(Internal Server Error)。在这种情况下,可以在错误日志中看到“重写或内部重定向循环”消息
    http {
    	error_page 404 /404.html;
    	location /404.html {
    		internal;
    	}
    }
    

lingering_close

  • 语法: lingering_close off|on|always;
  • 参数说明:
    • off – 表示Nginx立即关闭连接,绝不等待客户端传送额外数据,这样做违反了协议,不应在正常情况下使用
    • on – 表示Nginx在完成关闭连接前等待和处理客户端发来的额外数据,但只有在预测客户端可能发送更多数据的情况才会做此处理
    • always – 表示Nginx无条件等待和处理客户端的额外数据
  • 默认: lingering_close on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 控制Nginx如何关闭客户端连接。

lingering_time

  • 语法: lingering_time time;
  • 默认: lingering_time 30s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: lingering_close生效时,这条指令定义Nginx处理(读取但忽略)客户端额外数据的最长时间。超过这段时间后,Nginx将关闭连接,不论是否还有更多数据待处理。

lingering_timeout

  • 语法: lingering_timeout time;
  • 默认: lingering_timeout 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: lingering_close生效时,这条指令定义Nginx等待客户端更多数据到来的最长时间。如果在这段时间内,Nginx没有接收到数据,Nginx将关闭连接。否则,Nginx将接收数据,忽略它,然后再等待更多数据。这个“等待——接收——忽略”的循环一直重复,但总时间不会超过lingering_time指令定义的时间。

reset_timedout_connection

  • 语法: reset_timedout_connection on|off;
  • 默认: reset_timedout_connection off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 开启或关闭重置超时连接的功能。重置连接是这样执行的:关闭套接字以前,设置SO_LINGER选项的超时值为0,那么当关闭套接字时,Nginx向客户端发送TCP RST,并且释放此套接字占用的所有内存。这样可以避免某个已关闭的套接字长时间处于FIN_WAIT1状态,并占用内存缓冲区。应该注意的事,超时的长连接仍然是正常关闭。

absolute_redirect

  • 语法: absolute_redirect on|off;
  • 默认: absolute_redirect on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果禁用,Nginx发出的重定向将是相对的。

server_name_in_redirect

  • 语法: server_name_in_redirect on|off;
  • 默认: server_name_in_redirect off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用Nginx将server_name指令指定的首要虚拟主机名用于发起的重定向的功能。关闭此功能时,Nginx将使用"Host"请求头的中的名字,如果没有此请求头,将使用虚拟主机所在的IP地址。重定向中端口的使用由port_in_redirect指令控制。

port_in_redirect

  • 语法: port_in_redirect on|off;
  • 默认: port_in_redirect on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在Nginx发出的绝对重定向中指定端口。重定向中首要主机名的使用由server_name_in_redirect指令控制。

msie_padding

  • 语法: msie_padding on|off;
  • 默认: msie_padding on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用向状态码大于400的MSIE客户端的响应添加注释,以将响应大小增加到512字节。

msie_refresh

  • 语法: msie_refresh on|off;
  • 默认: msie_refresh on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为MSIE客户端开启或者关闭用页面刷新取代页面重定向的功能。

log_not_found

  • 语法: log_not_found on|off;
  • 默认: log_not_found on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在error_log中记录文件不存在的错误。

log_subrequest

  • 语法: log_subrequest on|off;
  • 默认: log_subrequest off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在access_log中记录子请求的访问日志。

recursive_error_pages

  • 语法: recursive_error_pages on|off;
  • 默认: recursive_error_pages off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用error_page指令进行多次重定向。允许的话,重定向次数也有限制。而禁止此功能时,当访问error_page指令重定向的错误页面出现任何问题时,Nginx将直接输出默认错误页面。

server_tokens

  • 语法: server_tokens on|off;
  • 默认: server_tokens on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在错误信息的"Server"响应头中添加Nginx版本号。

if_modified_since

  • 语法: if_modified_since off|exact|before;
  • 参数说明:
    • off – 表示"If-Modified-Since"请求头字段被忽略
    • exact – 表示响应信息的修改时间与"If-Modified-Since"请求头字段中的时间必须完全一致
    • before – 表示响应信息的修改时间小于或等于"If-Modified-Since"请求头字段中的时间
  • 默认: if_modified_since exact;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定如何将响应信息的修改时间与"If-Modified-Since"请求头字段中的时间进行比较。

max_ranges

  • 语法: max_ranges number;
  • 参数说明: 参数number为0时表示完全禁用字节范围请求
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制字节范围请求中允许的最大范围数。如果没有指定字节范围,则会处理超过限制的请求。默认情况下,范围的数量不受限制。

chunked_transfer_encoding

  • 语法: chunked_transfer_encoding on|off;
  • 默认: chunked_transfer_encoding on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用在HTTP/1.1中使用分块传输编码。尽管标准要求必须实现,但在使用无法支持分块编码的软件时,它可能会派上用场。

etag

  • 语法: etag on|off;
  • 默认: etag on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用静态资源的"ETag"响应头字段的自动生成。

error_page

  • 语法: error_page code … [=[response]] uri;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 设置指定的错误码对应显示的URI,uri可以包含变量。
    http {
    	server {
    		# 这会导致内部重定向到指定uri的客户端请求方法更改为"GET"(对于"GET"和"HEAD"以外的所有方法)
    		error_page 404 /404.html;
    		error_page 500 502 503 504 /50x.html;
    		
    		# 可以使用"=response"语法将响应代码更改为另一个
    		error_page 404 =200 /empty.gif;
    		
    		# 如果错误响应由代理服务器或FastCGI/uwsgi/SCGI/gRPC服务器处理,并且服务器可能返回不同的响应代码(例如200、302、401或404),则可以使用它的代码进行响应返回
    		error_page 404 = /404.php;
    		
    		# 如果在内部重定向期间不需要更改URI和请求方法,则可以将错误处理传递到命名位置
    		location / { 
    			error_page 404 = @fallback; 
    		} 
    
    		location @fallback { 
    			proxy_pass http://backend; 
    		}
    		
    		#也可以使用URL重定向进行错误处理
    		error_page 403 http://example/forbidden.html;
    		error_page 404 =301 http://example/notfound.html;
    	}
    }
    

post_action

  • 语法: post_action action;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 该指令会在http请求结束时产生一个新请求,产生一个内部跳转。
    # 以下示例在http://www.a/访问结束时,会产生一个内部跳转请求,跳转到@action,访问上游www.a-post-action
    http {
    	server {
    		listen  80;
    		server_name www.a;
    
    		location / {
    				proxy_set_header Host "www.a-upstream";
    				proxy_pass http://127.0.0.1:8000;
    				post_action @action;
    		}
    
    		location @action {
    				proxy_set_header Host "www.a-post-action";
    				proxy_pass http://127.0.0.1:8001;
    		}
    	}
    }
    

}
```


error_log

  • 语法: error_log file [level];
  • 参数说明:
    • file – 表示存储日志的文件,特殊值stderr表示选择标准错误文件,可以通过指定"syslog:"前缀来配置日志到syslog,可以通过指定"memory:"前缀和缓冲区大小来配置到循环内存缓冲区的日志记录
    • level – 表示日志记录的级别,可以是以下级别之一:debug、info、notice、warn、error、crit、alert或emerg。以上的日志级别是按严重性递增的顺序列出的,设置某个日志级别将导致记录指定的和更严重的日志级别的所有消息,如果省略此参数,则默认使用error级别记录日志
  • 默认: error_log logs/error.log error;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 配置日志记录,可以在同一配置级别上指定多个日志,如果在全局配置级别上未明确定义将日志写入文件,则将使用默认文件。如果要打印DEBUG级别的日志,需在构建Nginx时加上配置选项: –with-debug

open_file_cache

  • 语法: open_file_cache off|max=N [inactive=time];
  • 参数说明:
    • off – 表示禁用缓存
    • max – 表示设置缓存中元素的最大数量,当缓存溢出时,最近最少使用的元素被删除(LRU)
    • inactive – 表示定义一个时间,如果元素在这段时间内未被访问,则在该时间之后从缓存中删除该元素,默认为60秒
  • 默认: open_file_cache off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 配置可以存储的缓存:
    1. 打开文件描述符,它们的大小和修改时间;
    2. 有关目录存在的信息;
    3. 文件查找错误,例如“找不到文件”、“没有读取权限”等。

open_file_cache_valid

  • 语法: open_file_cache_valid time;
  • 默认: open_file_cache_valid 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置验证open_file_cache缓存元素的时间。

open_file_cache_min_uses

  • 语法: open_file_cache_min_uses number;
  • 默认: open_file_cache_min_uses 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在open_file_cache指令number的inactive参数配置的时间段内设置文件访问的最小值,这是文件描述符在缓存中保持打开状态所必需的。

open_file_cache_errors

  • 语法: open_file_cache_errors on|off;
  • 默认: open_file_cache_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 通过open_file_cache启用或禁用文件查找错误的缓存。

open_file_cache_events

  • 语法: open_file_cache_events on|off;
  • 默认: open_file_cache_events off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 通过open_file_cache启用或禁用事件缓存。

resolver

  • 语法: resolver address [address …] [valid=time] [ipv6=on|off] [status_zone=zone];
  • 参数说明:
    • address – 表示指定的域名或IP地址,如果未指定端口,则默认使用53端口
    • valid – 表示允许缓存的时间,默认情况下,Nginx使用响应的TTL值来作为缓存应答的时间
    • ipv6 – 表示是否查找IPv6地址,默认解析时会同时查找IPv4和IPv6地址,可以显示地使用"ipv6=off"来取消查找IPv6地址
    • status_zone – 表示收集指定区域内请求和响应的DNS服务器统计信息
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 配置用于将上游服务器的名称解析为地址的名称服务器,解析时以循环方式进行查询。
    http {
    	resolver 127.0.0.1 [::1]:5353;
    	resolver 127.0.0.1 [::1]:5353 valid=30s;
    }
    

resolver_timeout

  • 语法: resolver_timeout time;
  • 默认: resolver_timeout 30s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置DNS操作的超时时间。

gzip_vary

  • 语法: gzip_vary on|off;
  • 默认: gzip_vary off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果gzip、gzip_static或gunzip是激活的,启用或禁用插入"Vary: Accept-Encoding"响应头字段。

gzip_http_version

  • 语法: gzip_http_version 1.0|1.1;
  • 默认: gzip_http_version 1.1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置压缩响应所需请求的最低HTTP版本。

gzip_proxied

  • 语法: gzip_proxied off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any […];
  • 参数说明:
    • off – 表示禁用所有代理请求的压缩,忽略其他参数
    • expired – 表示如果响应头包含具有禁用缓存值的"Expires"字段,则启用压缩
    • no-cache – 表示如果响应头包含"Cache-Control"字段,并且其值为"no-cache",则启用压缩
    • no-store – 表示如果响应头包含"Cache-Control"字段,并且其值为"no-store",则启用压缩
    • private – 表示如果响应头包含"Cache-Control"字段,并且其值为"private",则启用压缩
    • no_last_modified – 表示如果响应头不包含"Last-Modified"字段,则启用压缩
    • no_etag – 表示如果响应头不包含"ETag"字段,则启用压缩
    • auth – 表示如果请求头包含"Authorization"字段,则启用压缩
    • any – 表示为所有代理请求启用压缩
  • 默认: gzip_proxied off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 根据请求和响应启用或禁用对代理请求的响应进行gzip压缩,该指令接受多个参数。

gzip_disable

  • 语法: gzip_disable regex [regex …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止对"User-Agent"标头字段匹配任何指定正则表达式的请求的响应进行gzip压缩。

disable_symlinks

  • 语法: disable_symlinks off;
        disable_symlinks on|if_not_owner [from=part];
  • 参数说明:
    • off – 表示路径名中的符号链接是允许的,不需要进行检查,这是默认行为
    • on – 表示如果路径名的任何组成部分是符号链接,则拒绝访问文件
    • if_not_owner – 表示如果路径名的任何组成部分是符号链接,并且链接指向的链接和对象具有不同的所有者,则拒绝访问文件
    • from=part – 表示检查符号链接(参数on和if_not_owner)时,通常会检查路径名的所有组成部分,通过额外指定from=part参数,可以避免检查路径名初始部分中的符号链接,在这种情况下,仅从指定初始部分之后的路径名组件检查符号链接,如果该值不是检查的路径名的初始部分,则检查整个路径名,就好像根本没有指定此参数一样,如果该值与整个文件名匹配,则不会检查符号链接,参数值可以包含变量
  • 默认: disable_symlinks off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定打开的文件是一个符号链接时应如何进行处理。
    http {
    	disable_symlinks on from=$document_root;
    }
    

2.3.10、ngx_http_dav_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_dav_module
该模块无法单独使用,需要与提供WebDAV操作方法的模块一起使用,可以 点击这里 获取配合WebDAV使用的第三方模块

dav_methods

  • 语法: dav_methods off | method [method …];
  • 默认: dav_methods off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许指定的HTTP和WebDAV接受的方法。参数off表示拒绝此模块处理的所有方法,支持的方法有:PUT,DELETE,MKCOL,COPY和MOVE。

create_full_put_path

  • 语法: create_full_put_path on|off;
  • 默认: create_full_put_path off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: WebDAV规范只允许在现有目录中创建文件,该指令允许创建所有需要的中间目录。

min_delete_depth

  • 语法: min_delete_depth number;
  • 默认: min_delete_depth 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许DELETE方法删除文件,前提是请求路径中的元素数不小于指定的数量。
    # 对于以下配置,允许根据请求删除/users/00/00/name文件,不允许删除/users/11/name文件
    http {
    	server {
    		location / {
    			root    /home/bifang;
    			
    			dav_methods PUT DELETE MKCOL COPY MOVE;
    			create_full_put_path  on;
    			min_delete_depth 4;
    		}
    	}
    }
    

dav_access

  • 语法: dav_access users:permissions [users:permissions …];
  • 默认: dav_access user:rw;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为新创建的文件和目录设置访问权限。
    http {
    	server {
    		location / {
    			...
    			# 正常设置权限
    			dav_access user:rw group:rw all:r;
    			# 如果指定了任意group或all访问权限,则user可以省略权限
    			dav_access group:rw all:r;
    		}
    	}
    }
    

2.3.11、ngx_http_degradation_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_degradation_module

degradation

  • 语法: degradation sbrk=size;
  • 默认:
  • 上下文: http块
  • 说明: 设置Nginx内存使用限制,超过此限制将返回错误响应给客户端。

degrade

  • 语法: degrade 204|444;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当内存限制达到时(degradation指令),选择返回给客户端的是204响应还是444响应。

2.3.12、ngx_http_empty_gif_module模块

empty_gif

  • 语法: empty_gif;
  • 默认:
  • 上下文: http块中的location块
  • 说明: 浏览器在访问网页时会请求一个ico文件来作为收藏夹的小图标,如果不想实现这个功能又不想报错的话可以使用该模块,该模块向浏览器发出单像素透明GIF,以此来骗浏览器。

2.3.13、ngx_http_fastcgi_module模块

fastcgi_pass

  • 语法: fastcgi_pass address;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块
  • 说明: 设置FastCGI服务器的地址,地址可以指定为域名或IP地址,也可以是UNIX域套接字。
    http {
    	server {
    		location / {
    			fastcgi_pass localhost:9000;
    			# UNIX域套接字路径
    			fastcgi_pass unix:/tmp/fastcgi.socket;
    			
    		}
    	}
    }
    

fastcgi_index

  • 语法: fastcgi_index name;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明:$fastcgi_script_name 变量的值中设置一个文件名,该文件名将附加在以斜杠结尾的URI之后。
    http {
    	server {
    		location / {
    			# 对于"/page.php"请求,SCRIPT_FILENAME参数将等于"/home/www/scripts/php/page.php"
    			# 对于"/"请求,它将等于"/home/www/scripts/php/index.php"
    			fastcgi_index index.php;
    			fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
    		}
    	}
    }
    

fastcgi_split_path_info

  • 语法: fastcgi_split_path_info regex;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义捕获 $fastcgi_path_info 变量值的正则表达式。正则表达式应该有两个捕获:第一个成为 $fastcgi_script_name 变量的值,第二个成为 $fastcgi_path_info 变量的值。
    # 以下设置对于"/show.php/article/0001"请求,SCRIPT_FILENAME参数等于"/path/to/php/show.php",PATH_INFO参数等于"/article/0001"
    http {
    	server {
    		location ~ ^(.+\.php)(.*)$ {
    			fastcgi_split_path_info       ^(.+\.php)(.*)$;
    			fastcgi_param SCRIPT_FILENAME /path/to/php$fastcgi_script_name;
    			fastcgi_param PATH_INFO       $fastcgi_path_info;
    		}
    	}
    }
    

fastcgi_store

  • 语法: fastcgi_store on|off|string;
  • 参数说明:
    • on – 表示将文件保存到alias或root对应的路径
    • off – 表示禁止保存文件
    • string – 表示显式地设置文件名,文件名可以使用变量来代替
  • 默认: fastcgi_store off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁止将文件保存到磁盘。

fastcgi_store_access

  • 语法: fastcgi_store_access users:permissions [users:permissions …];
  • 默认: fastcgi_store_access user:rw;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为新创建的文件和目录设置访问权限。
    http {
    	server {
    		location ~ ^(.+\.php)(.*)$ {
    			...
    			# 正常设置权限
    			fastcgi_store_access user:rw group:rw all:r;
    			# 如果指定了任意group或all访问权限,则user可以省略权限
    			fastcgi_store_access group:rw all:r;
    		}
    	}
    }
    

fastcgi_buffering

  • 语法: fastcgi_buffering on|off;
  • 默认: fastcgi_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用来自FastCGI服务器的响应缓冲。启用缓冲后,Nginx会尽快收到来自FastCGI服务器的响应,将其保存到由fastcgi_buffer_size和fastcgi_buffers指令设置的缓冲区中。如果整个响应过大,可以将其中的一部分保存到磁盘上的临时文件中。写入临时文件由fastcgi_max_temp_file_size和fastcgi_temp_file_write_size指令控制。当缓冲被禁用时,响应会在收到时立即同步传递给客户端。Nginx不会尝试从FastCGI服务器读取整个响应。Nginx一次可以从服务器接收的最大数据大小由fastcgi_buffer_size指令设置。也可以通过在"X-Accel-Buffering"响应头字段中传递"yes"或"no"来启用或禁用缓冲。可以使用fastcgi_ignore_headers指令禁用此功能。

fastcgi_request_buffering

  • 语法: fastcgi_request_buffering on|off;
  • 默认: fastcgi_request_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用客户端请求正文的缓冲。启用缓冲后,在将请求发送到FastCGI服务器之前,将从客户端读取整个请求正文。当缓冲被禁用时,请求正文在收到时立即发送到FastCGI服务器。在这种情况下,如果Nginx已经开始发送请求正文,则请求无法传递到下一个服务器。

fastcgi_ignore_client_abort

  • 语法: fastcgi_ignore_client_abort on|off;
  • 默认: fastcgi_ignore_client_abort off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定当客户端在不等待响应的情况下关闭连接时,是否应关闭与FastCGI服务器的连接。

fastcgi_bind

  • 语法: fastcgi_bind address [transparent]|off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起到FastCGI服务器的连接
    • off – 表示取消了fastcgi_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向FastCGI服务器发起连接,
    http {
    	fastcgi_bind $remote_addr transparent;
    }
    

fastcgi_socket_keepalive

  • 语法: fastcgi_socket_keepalive on|off;
  • 默认: fastcgi_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到FastCGI服务器的连接配置"TCP keepalive"选项。默认情况下,操作系统的设置对套接字有效。如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

fastcgi_connect_timeout

  • 语法: fastcgi_connect_timeout time;
  • 默认: fastcgi_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与FastCGI服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

fastcgi_send_lowat

  • 语法: fastcgi_send_lowat size;
  • 默认: fastcgi_send_lowat 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 该指令在Linux上无效。

fastcgi_buffer_size

  • 语法: fastcgi_buffer_size size;
  • 默认: fastcgi_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从FastCGI服务器接收的响应的第一部分的缓冲区的大小,这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

fastcgi_pass_request_headers

  • 语法: fastcgi_pass_request_headers on|off;
  • 默认: fastcgi_pass_request_headers on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求的报头字段传递给FastCGI服务器。

fastcgi_pass_request_body

  • 语法: fastcgi_pass_request_body on|off;
  • 默认: fastcgi_pass_request_body on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求正文信息传递给FastCGI服务器。

fastcgi_intercept_errors

  • 语法: fastcgi_intercept_errors on|off;
  • 默认: fastcgi_intercept_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定是否应该将响应码大于或等于300的FastCGI服务器响应传递给客户端,或者拦截并重定向到Nginx以使用error_page指令进行处理。

fastcgi_read_timeout

  • 语法: fastcgi_read_timeout time;
  • 默认: fastcgi_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从FastCGI服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果FastCGI服务器在此时间内没有传输任何内容,则连接关闭。

fastcgi_buffers

  • 语法: fastcgi_buffers number size;
  • 默认: fastcgi_buffers 8 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为单个连接设置用于从FastCGI服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

fastcgi_busy_buffers_size

  • 语法: fastcgi_busy_buffers_size size;
  • 默认: fastcgi_busy_buffers_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用了对来自FastCGI服务器的响应的缓存时,该指令可以限制缓冲区的总大小,可以是正忙于发送到客户端的响应,而响应还没有完全读取。同时,其余的缓冲区可用于读取响应,如果需要,还可以缓冲对临时文件的部分响应。默认情况下,大小受fastcgi_buffer_size和fastcgi_buffers两个缓冲区大小的限制。

fastcgi_force_ranges

  • 语法: fastcgi_force_ranges on|off;
  • 默认: fastcgi_force_ranges off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 无论这些响应中的"Accept-Ranges"字段如何,都为来自FastCGI服务器的缓存和未缓存响应启用字节范围支持。

fastcgi_limit_rate

  • 语法: fastcgi_limit_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: fastcgi_limit_rate 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制从FastCGI服务器读取响应的速度。该限制是针对每个请求设置的,因此如果Nginx同时打开两个到FastCFI服务器的连接,则总体速率将是指定限制的两倍。仅当启用了FastCGI服务器的响应缓冲时,此限制才有效。

fastcgi_cache

  • 语法: fastcgi_cache zone|off;
  • 参数说明:
    • zone – 表示缓存的区域,可以包含变量
    • off – 表示禁用从先前配置级别继承缓存信息
  • 默认: fastcgi_cache off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义用于缓存的共享内存区域,同一个区域可以在多个地方使用。

fastcgi_cache_key

  • 语法: fastcgi_cache_key string;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个用于缓存的键。

fastcgi_cache_path

  • 语法: fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  • 默认:
  • 上下文: http块
  • 说明: 设置缓存的路径和其他参数,缓存数据存储在文件中,缓存中的键名和文件名都是对代理URL使用MD5函数生成的结果。

fastcgi_cache_bypass

  • 语法: fastcgi_cache_bypass string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不从缓存中获取响应的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会从缓存中获取响应。
    http {
    	fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment; 
    	fastcgi_cache_bypass $http_pragma $http_authorization;
    }
    

fastcgi_no_cache

  • 语法: fastcgi_no_cache string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不将响应保存到缓存的条件。如果字符串参数中至少有一个值不为空且不等于"0",则不会保存响应。
    http {
    	fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; 
    	fastcgi_no_cache $http_pragma $http_authorization;
    }
    

fastcgi_cache_valid

  • 语法: fastcgi_cache_valid [code …] time;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为不同的响应码设置缓存时间。
    http {
    	# 为响应码200和302的响应信息设置10分钟的缓存
    	fastcgi_cache_valid 200 302 10m;
    	# 为响应码404的响应信息设置1分钟的缓存
    	fastcgi_cache_valid 404 1m;
    	
    	# 如果没有指定响应码,则只有200、301和302响应被缓存。
    	fastcgi_cache_valid 5m;
    	
    	# 可以指定any参数来表示缓存任何响应
    	fastcgi_cache_valid any 1m;
    }
    

fastcgi_cache_min_uses

  • 语法: fastcgi_cache_min_uses number;
  • 默认: fastcgi_cache_min_uses 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置一个请求数,当超过该请求数之后将缓存响应。

fastcgi_cache_max_range_offset

  • 语法: fastcgi_cache_max_range_offset number;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置字节范围请求的字节偏移量,如果范围超出了偏移量,范围请求将被传递到FastCGI服务器,而响应将不会被缓存。

fastcgi_cache_use_stale

  • 语法: fastcgi_cache_use_stale error|timeout|invalid_header|updating|http_500|http_503|http_403|http_404|http_429|off …;
  • 默认: fastcgi_cache_use_stale off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在什么情况下,当与FastCGI服务器通信时发生错误时,可以使用过时的缓存响应,该指令的参数与fastcgi_next_upstream指令的参数匹配。如果无法选择FastCGI服务器来处理请求,错误参数还允许使用过时的缓存响应。此外,如果当前正在更新缓存响应,则更新参数允许使用过时的响应,这允许在更新缓存数据时最小化对FastCGI服务器的访问次数。也可以在响应失效后在响应头中直接启用过期缓存响应,这比使用指令参数具有更低的优先级。"Cache-Control"报头字段的"stale-while-revalidate"扩展允许在当前正在更新的情况下使用陈旧的缓存响应,"Cache-Control"报头字段的"stale-if-error"扩展允许在出现错误时使用陈旧的缓存响应。当填充一个新的缓存元素时,为了最小化对FastCGI服务器的访问次数,可以使用fastcgi_cache_lock指令。

fastcgi_cache_methods

  • 语法: fastcgi_cache_methods GET|HEAD|POST [GET|HEAD|POST …];
  • 默认: fastcgi_cache_methods GET HEAD;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果此指令中列出了客户端请求方法,则响应将被缓存。GET和HEAD方法始终添加到列表中,但建议明确指定它们。

fastcgi_cache_lock

  • 语法: fastcgi_cache_lock on|off;
  • 默认: fastcgi_cache_lock off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用时,一次只允许一个请求填充一个新的缓存元素,根据fastcgi_cache_key指令,通过传递一个请求到FastCGI服务器。对同一个缓存元素的其它请求要么等待响应出现在缓存中,要么等待释放这个元素的缓存锁,直到fastcgi_cache_lock_timeout指令设置的时间到达。

fastcgi_cache_lock_timeout

  • 语法: fastcgi_cache_lock_timeout time;
  • 默认: fastcgi_cache_lock_timeout 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为fastcgi_cache_lock设置超时,当time过期时,请求将被传递到FastCGI服务器,但是响应将不会被缓存。

fastcgi_cache_lock_age

  • 语法: fastcgi_cache_lock_age time;
  • 默认: fastcgi_cache_lock_age 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果上次传递给FastCGI服务器用于填充新缓存元素的请求在指定的时间内没有完成,那么可能会再传递一个请求给FastCGI服务器。

fastcgi_cache_revalidate

  • 语法: fastcgi_cache_revalidate on|off;
  • 默认: fastcgi_cache_revalidate off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许使用带有"If-Modified-Since"和"If-None-Match"头字段的条件请求重新验证过期的缓存项。

fastcgi_cache_background_update

  • 语法: fastcgi_cache_background_update on|off;
  • 默认: fastcgi_cache_background_update off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许启动后台子请求来更新过期的缓存项,同时将过期的缓存响应返回给客户端。注意,有必要允许在更新时使用陈旧的缓存响应。

fastcgi_temp_path

  • 语法: fastcgi_temp_path path [level1 [level2 [level3]]];
  • 默认: fastcgi_temp_path fastcgi_temp;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个目录用于存储从FastCGI服务器接收到的数据的临时文件,最多可在指定目录下使用三层子目录层次结构。
    # 对于以下配置,临时文件可能为:/usr/local/nginx/fastcgi_temp/7/45/00000123457
    http {
    	fastcgi_temp_path /usr/local/nginx/fastcgi_temp 1 2;
    }
    

fastcgi_max_temp_file_size

  • 语法: fastcgi_max_temp_file_size size;
  • 参数说明:
    • size – 为0时表示禁止使用临时文件来缓冲响应信息
  • 默认: fastcgi_max_temp_file_size 1024m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当缓存来自FastCGI服务器的响应是启用的,并且整个响应不适合fastcgi_buffer_size和fastcgi_buffers指令设置的缓冲区,响应的一部分可以保存到一个临时文件。这个指令设置的就是这个临时文件的最大大小。每次写入临时文件的数据大小由fastcgi_temp_file_write_size指令设置。

fastcgi_temp_file_write_size

  • 语法: fastcgi_temp_file_write_size size;
  • 默认: fastcgi_temp_file_write_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当FastCGI服务器的响应缓存到临时文件时,限制一次写入到临时文件的数据的大小。默认情况下,大小受fastcgi_buffer_size和fastcgi_buffers指令设置的两个缓冲区的限制。临时文件的最大大小是由fastcgi_max_temp_file_size指令设置的。

fastcgi_next_upstream

  • 语法: fastcgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_403|http_404|http_429|non_idempotent|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向其传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向其传递请求或读取响应标头时发生超时
    • invalid_header – 表示服务器返回空或无效的响应
    • http_500 – 表示服务器返回响应码为500的响应
    • http_503 – 表示服务器返回响应码为503的响应
    • http_403 – 表示服务器返回响应码为403的响应
    • http_404 – 表示服务器返回响应码为404的响应
    • http_429 – 表示服务器返回响应码为429的响应
    • non_idempotent – 通常,如果请求已发送到上游服务器,则使用“非幂等”方法(POST, LOCK, PATCH)的请求不会传递到下一个服务器,显式启用该参数允许重试此类请求
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: fastcgi_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在何种情况下应将请求传递给下一个服务器。

fastcgi_next_upstream_tries

  • 语法: fastcgi_next_upstream_tries number;
  • 默认: fastcgi_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

fastcgi_next_upstream_timeout

  • 语法: fastcgi_next_upstream_timeout time;
  • 默认: fastcgi_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

fastcgi_param

  • 语法: fastcgi_param parameter value [if_not_empty];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置一个应该传递给FastCGI服务器的参数,该值可以包含文本、变量或者它们的组合。当且仅当当前级别没有定义fastcgi_param指令时,这些指令从上一个配置级别继承。

fastcgi_pass_header

  • 语法: fastcgi_pass_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许从FastCGI服务器向客户端传递禁用的报头字段。

fastcgi_hide_header

  • 语法: fastcgi_hide_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,Nginx不从FastCGI服务器传递拥有头字段"Status"和"X-Accel-…"的响应到客户端。fastcgi_hide_header指令设置了其他不会被传递的字段。相反,如果需要允许传递字段,可以使用fastcgi_pass_header指令。

fastcgi_ignore_headers

  • 语法: fastcgi_ignore_headers field [field …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止处理FastCGI服务器的某些响应报头字段,以下字段可以忽略:“X-Accel-Expires”、“X-Accel-Redirect”、“X-Accel-Limit-Rate”、“X-Accel-Buffering”、“X-Accel-Charset”、“Expires”、“Cache-Control”、“Set-Cookie"和"Vary”。如果未禁用,则处理这些报头字段具有以下效果:
    1. “X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”、"Vary"设置响应缓存的参数;
    2. "X-Accel-Redirect"执行到指定URI的内部重定向;
    3. "X-Accel-Limit-Rate"设置传输响应给客户端的速率限制;
    4. "X-Accel-Buffering"启用或禁用响应缓冲;
    5. "X-Accel-Charset"设置响应所需字符集。

fastcgi_catch_stderr

  • 语法: fastcgi_catch_stderr string;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置要在从FastCGI服务器收到的响应的错误流中搜索的字符串。如果string找到,则认为FastCGI服务器返回了无效响应,这允许在Nginx中处理应用程序错误。
    http {
    	server {
    		location /php/ {
    			fastcgi_pass backend:9000;
    			...
    			fastcgi_catch_stderr "PHP Fatal error";
    			fastcgi_next_upstream error timeout invalid_header;
    		}
    	}
    }
    

fastcgi_keep_conn

  • 语法: fastcgi_keep_conn on|off;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置要在从FastCGI服务器收到的响应的错误流中搜索的字符串。如果string找到,则认为FastCGI服务器返回了无效响应,这允许在Nginx中处理应用程序错误。
    http {
    	server {
    		location /php/ {
    			fastcgi_pass backend:9000;
    			...
    			fastcgi_catch_stderr "PHP Fatal error";
    			fastcgi_next_upstream error timeout invalid_header;
    		}
    	}
    }
    

2.3.14、ngx_http_flv_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_flv_module

flv

  • 语法: flv;
  • 默认:
  • 上下文: http块中的location块
  • 说明: 该模块为Flash视频(FLV格式文件)提供伪流服务器端支持。可以在请求URI的查询字段中特别地使用start参数去处理请求,Nginx会根据请求字节偏移量start去发送文件特定位置的内容(带有前置FLV头)。

2.3.15、ngx_http_geoip_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_geoip_module
该模块需要 MaxMind GeoIP 库的支持

geoip_country

  • 语法: geoip_country file;
  • 默认:
  • 上下文: http块
  • 说明: 指定用于根据客户端IP地址确定国家的数据库。使用此数据库时可用以下变量:
    1. $geoip_country_code:两个字母的国家/地区代码,例如"RU"、“US”
    2. $geoip_country_code3:三个字母的国家/地区代码,例如"RUS"、“USA”
    3. $geoip_country_name:国家名称,例如"Russian Federation"、“United States”

geoip_org

  • 语法: geoip_org file;
  • 默认:
  • 上下文: http块
  • 说明: 指定用于根据客户端 IP 地址确定组织的数据库。使用此数据库时可用以下变量:
    1. $geoip_org:组织名称,例如"The University of Melbourne"

geoip_city

  • 语法: geoip_city file;
  • 默认:
  • 上下文: http块
  • 说明: 指定用于根据客户端IP地址确定国家、地区和城市的数据库。使用此数据库时可用以下变量:
    1. $geoip_city_continent_code:两个字母的大陆代码,例如"EU"、“NA”
    2. $geoip_city_country_code:两个字母的国家/地区代码,例如"RU"、“US”
    3. $geoip_city_country_code3:三个字母的国家/地区代码,例如"RUS"、“USA”
    4. $geoip_city_country_name:国家名称,例如"Russian Federation"、“United States”
    5. $geoip_dma_code:根据Google AdWords API中的地理定位
    6. $geoip_latitude:纬度
    7. $geoip_longitude:经度
    8. $geoip_region:双符号国家/地区代码(地区、领土、州、省、联邦土地等),例如"48"、“DC”
    9. $geoip_region_name:国家/地区名称(地区、领地、州、省、联邦土地等),例如"Moscow City"、“District of Columbia”
    10. $geoip_city:城市名称,例如"Moscow"、“Washington”
    11. $geoip_postal_code:邮政编码

geoip_proxy

  • 语法: geoip_proxy address|CIDR;
  • 默认:
  • 上下文: http块
  • 说明: 定义可信地址,当请求来自可信地址时,将使用"X-Forwarded-For"请求头字段中的地址。

geoip_proxy_recursive

  • 语法: geoip_proxy_recursive on|off;
  • 默认: geoip_proxy_recursive off;
  • 上下文: http块
  • 说明: 如果递归搜索被禁用,则将使用"X-Forwarded-For"中发送的最后一个地址,而不是匹配受信任地址之一的原始客户端地址。如果启用了递归搜索,则将使用"X-Forwarded-For"中发送的最后一个非信任地址,而不是匹配受信任地址之一的原始客户端地址。
    http {
    	geoip_country GeoIP.dat;
    	geoip_city GeoLiteCity.dat;
    	geoip_proxy 192.168.100.0/24;
    	geoip_proxy 2001:0db8::/32;
    	geoip_proxy_recursive on;
    	...
    }
    

2.3.16、ngx_http_geo_module模块

geo

  • 语法: geo [$address] $variable {…}
  • 默认:
  • 上下文: http块
  • 说明: 根据客户端IP地址创建具有值的变量。

2.3.17、ngx_http_grpc_module模块

该模块依赖于ngx_http_v2_module模块

grpc_pass

  • 语法: grpc_pass address;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块
  • 说明: 设置gRPC服务器地址,地址可以指定为域名或IP地址,也可以是UNIX域套接字。
    http {
    	server {
    		location / {
    			grpc_pass localhost:9000;
    			grpc_pass unix:/tmp/grpc.socket;
    			grpc_pass grpc://127.0.0.1:9000;
    			grpc_pass grpcs://127.0.0.1:443;
    		}
    	}
    }
    

grpc_bind

  • 语法: grpc_bind address [transparent]|off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起到gRPC服务器的连接
    • off – 表示取消了grpc_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向gRPC服务器发起连接。
    http {
    	grpc_bind $remote_addr transparent;
    }
    

grpc_socket_keepalive

  • 语法: grpc_socket_keepalive on|off;
  • 默认: grpc_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到gRPC服务器的连接配置"TCP keepalive"选项。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

grpc_connect_timeout

  • 语法: grpc_connect_timeout time;
  • 默认: grpc_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与gRPC服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

grpc_send_timeout

  • 语法: grpc_send_timeout time;
  • 默认: grpc_send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将请求传输到gRPC服务器的超时时间。这里指的是在两次连续写入操作之间间隔,而不是针对整个请求的传输。如果gRPC服务器在此时间内没有收到任何消息,则连接关闭。

grpc_intercept_errors

  • 语法: grpc_intercept_errors on|off;
  • 默认: grpc_intercept_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定是否应该将响应码大于或等于300的gRPC服务器响应传递给客户端,或者拦截并重定向到Nginx以使用error_page指令进行处理。

grpc_buffer_size

  • 语法: grpc_buffer_size size;
  • 默认: grpc_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从gRPC服务器接收到的响应的缓冲区大小。一旦接收到响应,就同步地将其传递给客户机。

grpc_read_timeout

  • 语法: grpc_read_timeout time;
  • 默认: grpc_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从gRPC服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果gRPC服务器在此时间内没有传输任何内容,则连接关闭。

grpc_next_upstream

  • 语法: grpc_next_upstream error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_403|http_404|http_429|non_idempotent|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向其传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向其传递请求或读取响应标头时发生超时
    • invalid_header – 表示服务器返回空或无效的响应
    • http_500 – 表示服务器返回响应码为500的响应
    • http_502 – 表示服务器返回响应码为502的响应
    • http_503 – 表示服务器返回响应码为503的响应
    • http_504 – 表示服务器返回响应码为504的响应
    • http_403 – 表示服务器返回响应码为403的响应
    • http_404 – 表示服务器返回响应码为404的响应
    • http_429 – 表示服务器返回响应码为429的响应
    • non_idempotent – 通常,如果请求已发送到上游服务器,则使用“非幂等”方法(POST, LOCK, PATCH)的请求不会传递到下一个服务器,显式启用该参数允许重试此类请求
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: grpc_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在哪些情况下应将请求传递到下一个服务器。

grpc_next_upstream_tries

  • 语法: grpc_next_upstream_tries number;
  • 默认: grpc_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制将请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

grpc_next_upstream_timeout

  • 语法: grpc_next_upstream_timeout time;
  • 默认: grpc_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

grpc_set_header

  • 语法: grpc_set_header field value;
  • 默认: grpc_set_header Content-Length $content_length;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许在传递给gRPC服务器的请求头中重新定义或附加字段,该值可以包含文本、变量或者它们的组合。当且仅当当前级别没有定义grpc_set_header指令时,这些指令从上一个配置级别继承。如果标头字段的值为空字符串,则该字段将不会传递给gRPC服务器。
    http {
    	# 以下示例表示"Accept-Encoding"字段不会传递给gRPC服务器
    	grpc_set_header Accept-Encoding "";
    }
    

grpc_pass_header

  • 语法: grpc_pass_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许从gRPC服务器向客户端传递禁用的报头字段。

grpc_hide_header

  • 语法: grpc_hide_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,Nginx不从gRPC服务器传递拥有头字段"Date"、" Server"和"X-Accel-…"的响应到客户端。grpc_hide_header指令设置了其他不会被传递的字段。相反,如果需要允许字段的传递,则可以使用grpc_pass_header指令。

grpc_ignore_headers

  • 语法: grpc_ignore_headers field [field …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止处理gRPC服务器的某些响应报头字段。以下字段可以忽略:“X-Accel-Redirect"和"X-Accel-Charset”。如果未禁用,则处理这些报头字段的效果如下:
    1. "X-Accel-Redirect"执行到指定URI的内部重定向;
    2. "X-Accel-Charset"设置响应所需字符集。

grpc_ssl_session_reuse

  • 语法: grpc_ssl_session_reuse on|off;
  • 默认: grpc_ssl_session_reuse on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在使用gRPC服务器时SSL会话是否可以重用。如果日志中出现错误"SSL3_GET_FINISHED:digest check failed",请尝试禁用会话重用。

grpc_ssl_protocols

  • 语法: grpc_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: grpc_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为gRPC SSL服务器的请求启用指定的协议。

grpc_ssl_ciphers

  • 语法: grpc_ssl_ciphers ciphers;
  • 默认: grpc_ssl_ciphers DEFAULT;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定向gRPC SSL服务器请求时启用的密码,密码以OpenSSL库能够理解的格式指定。可以使用"openssl ciphers"命令查看完整列表。

grpc_ssl_name

  • 语法: grpc_ssl_name name;
  • 默认: grpc_ssl_name host from grpc_pass;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许覆盖用于验证gRPC SSL服务器的证书并在与gRPC SSL服务器建立连接时通过SNI传递的服务器名称。默认情况下,使用来自grpc_pass的主机部分。

grpc_ssl_server_name

  • 语法: grpc_ssl_server_name on|off;
  • 默认: grpc_ssl_server_name off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在与gRPC SSL服务器建立连接时,启用或禁用通过TLS服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。

grpc_ssl_verify

  • 语法: grpc_ssl_verify on|off;
  • 默认: grpc_ssl_verify off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用gRPC SSL服务器证书的验证。

grpc_ssl_verify_depth

  • 语法: grpc_ssl_verify_depth number;
  • 默认: grpc_ssl_verify_depth 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置gRPC SSL服务器证书链中的验证深度。

grpc_ssl_trusted_certificate

  • 语法: grpc_ssl_trusted_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证gRPC SSL服务器的证书。

grpc_ssl_crl

  • 语法: grpc_ssl_crl file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证gRPC SSL服务器的证书。

grpc_ssl_certificate

  • 语法: grpc_ssl_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的证书用于验证gRPC SSL服务器的证书。

grpc_ssl_certificate_key

  • 语法: grpc_ssl_certificate_key file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的带密钥的证书用于验证gRPC SSL服务器的证书。可以指定值engine:name:id代替文件,它从OpenSSL engine name中加载具有指定id的密钥。

grpc_ssl_password_file

  • 语法: grpc_ssl_password_file file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

2.3.18、ngx_http_gunzip_filter_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_gunzip_filter_module

gunzip

  • 语法: gunzip on|off;
  • 默认: gunzip off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为缺乏gzip支持的客户端启用或禁用gzip响应的解压缩。如果启用,在确定客户端是否支持gzip时也会考虑以下指令:gzip_http_version、gzip_proxy和gzip_disable。

gunzip_buffers

  • 语法: gunzip_buffers number size;
  • 默认: gunzip_buffers 32 4k|16 8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于解压缩响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

2.3.19、ngx_http_gzip_filter_module模块

gzip

  • 语法: gzip on|off;
  • 默认: gzip off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 启用或禁用对响应信息的压缩。

gzip_buffers

  • 语法: gzip_buffers number size;
  • 默认: gzip_buffers 32 4k|16 8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于压缩响应信息的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

gzip_types

  • 语法: gzip_types mime-type [mime-type …];
  • 默认: gzip_types text/html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许自行指定对MIME类型的响应信息进行压缩,特殊值"*"表示匹配任何MIME类型,"text/html"类型的响应信息总是被压缩的。

gzip_comp_level

  • 语法: gzip_comp_level 1|2|3|4|5|6|7|8|9;
  • 默认: gzip_comp_level 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置响应信息的压缩级别,取值范围为1~9。

gzip_window

  • 语法: gzip_window 512|1k|2k|4k|8k|16k|32k;
  • 默认: gzip_window 32k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置deflateInit2函数的windowBits参数,事实上该参数更多的作用是压缩模式选择,默认的32k参数代表的就是压缩为gzip格式。

gzip_hash

  • 语法: gzip_hash 512|1k|2k|4k|8k|16k|32k|64k|128k;
  • 默认: gzip_hash 32k|64k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置压缩过程中的内存限制。默认值有可能是32k或64k,具体取决于平台。

postpone_gzipping

  • 语法: postpone_gzipping size;
  • 默认: postpone_gzipping 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在开始压缩前定义一个最小压缩数据门槛。

gzip_no_buffer

  • 语法: gzip_no_buffer on|off;
  • 默认: gzip_no_buffer off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,在将数据发送到客户端之前Nginx会等待,直到至少一个缓存被数据填满,如果开启该指令,就会禁用缓存。

gzip_min_length

  • 语法: gzip_min_length length;
  • 默认: gzip_min_length 20;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将被压缩的响应信息的最小长度,长度仅从"Content-Length"字段确定。

2.3.20、ngx_http_gzip_static_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_gzip_static_module

gzip_static

  • 语法: gzip_static on|off|always;
  • 参数说明:
    • on – 表示会检查预压缩文件是否存在
    • off – 表示进制发送预压缩文件
    • always – 表示表示在始终认为预压缩文件存在,如果磁盘上没有未压缩的文件,或者使用了ngx_http_gunzip_module模块,这将非常有用
  • 默认: gzip_static off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 该模块允许发送带有".gz"文件扩展名的预压缩文件。

2.3.21、ngx_http_headers_filter_module模块

expires

  • 语法: expires [modified] time;
        expires epoch|max|off;
  • 参数说明:
    • modified – “Expires"字段中的时间为当前时间和指令中指定的时间的总和,如果使用了该参数,那么时间计算为文件的修改时间和指令中指定的时间的总和。另外,可以使用”@"前缀指定一天中的某个时间,比如:expires @15h30m;
    • time – 该参数可以是正或负的值,“Cache-Control"字段的内容取决于指定时间的符号:如果time为负则设置为"Cache-Control: no-cache”,如果time为正或零则设置为"Cache-Control: max-age= t",其中t是指令中指定的时间,以秒为单位
    • epoch – 表示将"Expires"的值设置为"Thu, 01 Jan 1970 00:00:01 GMT",将"Cache-Control"的值设置为"no-cache"
    • max – 表示将"Expires"的值设置为"Thu, 31 Dec 2037 23:55:55 GMT",将"Cache-Control"的值设置为10年
    • off – 表示禁止添加或修改响应头的"Expires"和"Cache-Control"字段
  • 默认: expires off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 如果响应代码等于200、201, 204, 206, 301, 302, 303, 304, 307或308时,则启用或禁用添加或修改响应头的"Expires"和"Cache-Control"字段。

add_header

  • 语法: add_header name value [always];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 如果响应代码等于200、201、204、206、301、302、303、304、307或 308,则将指定字段添加到响应头,参数值可以包含变量。可以设置多个add_header指令,当且仅当add_header当前级别上没有定义任何指令时,这些指令才从先前的配置级别继承。如果指定了参数always,则无论响应代码如何,都将添加标头字段。

add_trailer

  • 语法: add_trailer name value [always];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 如果响应代码等于200、201、206、301、302、303、307或308,则将指定字段添加到响应的末尾,参数值可以包含变量。可以设置多个add_trailer指令,当且仅当add_trailer当前级别上没有定义任何指令时,这些指令才从先前的配置级别继承。如果指定了参数always,则无论响应代码如何,都将添加指定的字段。

2.3.22、ngx_http_image_filter_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_image_filter_module
该模块需要 libgd 库的支持

image_filter

  • 语法: image_filter off;
        image_filter test;
        image_filter size;
        image_filter rotate 90|180|270;
        image_filter resize width height;
        image_filter crop width height;
  • 参数说明:
    • off – 表示关闭当前层级改模块的处理
    • test – 表示确保响应是JPEG、GIF、PNG或WebP格式的图像,否则将返回415(Unsupported Media Type)错误
    • size – 表示以JSON格式输出有关图像的信息
    • rotate 90|180|270 – 表示按指定的度数逆时针旋转图像,参数值可以包含变量
    • resize width height – 表示按比例将图像缩小到指定的大小,如果仅想要减少一个维度,可以将另一个维度指定为"-",如果出现错误,服务器将返回代码415(Unsupported Media Type),参数值可以包含变量,当与rotate参数一起使用时,resize将会更早被调用
    • crop width height – 表示按比例将图像缩小到较大的一侧,并在另一侧裁剪无关的边缘,如果仅想要减少一个维度,可以将另一个维度指定为"-",如果出现错误,服务器将返回代码415(Unsupported Media Type),参数值可以包含变量,当与rotate参数一起使用时,旋转发生在减少之前
  • 默认: image_filter off;
  • 上下文: http块中的location块
  • 说明: 设置要对图像执行的转换类型。

image_filter_jpeg_quality

  • 语法: image_filter_jpeg_quality quality;
  • 默认: image_filter_jpeg_quality 75;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置转换后的JPEG图像的质量,取值范围为1~100。较小的值通常意味着较低的图像质量和更少的数据传输,建议最大值为95,参数值可以包含变量。

image_filter_webp_quality

  • 语法: image_filter_webp_quality quality;
  • 默认: image_filter_webp_quality 80;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置转换后的WebP图像的质量,取值范围为1~100。较小的值通常意味着较低的图像质量和更少的数据传输,参数值可以包含变量。

image_filter_sharpen

  • 语法: image_filter_sharpen percent;
  • 默认: image_filter_sharpen 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 增加最终图像的清晰度,锐度百分比可超过100,零值表示禁用锐化,参数值可以包含变量。

image_filter_transparency

  • 语法: image_filter_transparency on|off;
  • 默认: image_filter_transparency on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义在使用调色板指定的颜色转换GIF图像或PNG图像时是否应保留透明度,透明度的损失导致图像质量更好,始终保留PNG图像中的Alpha通道透明度。

image_filter_interlace

  • 语法: image_filter_interlace on|off;
  • 默认: image_filter_interlace off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果启用,最终图像将交错,对于JPEG图像,最终将采用"渐进式 JPEG"格式。

image_filter_buffer

  • 语法: image_filter_buffer size;
  • 默认: image_filter_buffer 1m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取图像的缓冲区的最大大小,当超过大小时,服务器返回错误415(Unsupported Media Type)。

2.3.23、ngx_http_index_module模块

index

  • 语法: index file [file …];
  • 默认: index index.html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义将用作索引的文件,参数file可以包含变量。按照指定的顺序检查文件,列表的最后一个元素可以是具有绝对路径的文件。需要注意的是,使用索引文件会导致内部重定向,并且可以在不同的位置处理请求。
    # 下面的例子中,"/"的请求首先会判断/data/www/index.html是否存在,如果不,
    # 则接着判断/data/www/index.php,如果/data/www/index.php存在,则使用/index.php
    # 发起内部重定向,就像客户端再一次发起请求一样,Nginx会再一次搜索路径,
    # 这样毫无疑问会匹配到第二个 ~ \.php$,从而最终访问的是 /data/www/test/index.php
    http {
    	server {
    		location / {
    			root /data/www;
    			index index.html index.php;
    		}
    
    		location ~ \.php$ {
    			root /data/www/test;
    		}
    	}
    }
    

2.3.24、ngx_http_limit_conn_module模块

limit_conn_zone

  • 语法: limit_conn_zone $variable zone=name:size;
  • 默认:
  • 上下文: http块
  • 说明: 设定保存各个键的状态的共享内存空间的参数,键的状态中保存了当前连接数,键的值可以是特定变量的任何非空值(空值将不会被考虑)。
    http {
    	limit_conn_zone $binary_remote_addr zone=addr:10m;
    }
    

limit_conn

  • 语法: limit_conn zone number;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为给定的键值设置共享内存区域和最大允许连接数。当超过此限制时,服务器将返回错误信息以响应请求。
    # 以下示例表示每个IP地址一次只允许一个连接
    http {
    	limit_conn_zone $binary_remote_addr zone=addr:10m;
    	
    	server {
    		location /download/ {
    			limit_conn addr 1;
    		}
    	}
    }
    

limit_conn_log_level

  • 语法: limit_conn_log_level info|notice|warn|error;
  • 默认: limit_conn_log_level error;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为服务器限制连接数的情况设置所需的日志记录级别。

limit_conn_status

  • 语法: limit_conn_status code;
  • 默认: limit_conn_status 503;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置状态代码以响应被拒绝的请求。

limit_conn_dry_run

  • 语法: limit_conn_dry_run on|off;
  • 默认: limit_conn_dry_run off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用试运行模式。在这种模式下,连接数没有限制,但是在共享内存区,过多的连接数照常计算。

2.3.25、ngx_http_limit_req_module模块

limit_req_zone

  • 语法: limit_req_zone key zone=name:size rate=rate [sync];
  • 默认:
  • 上下文: http块
  • 说明: 为共享内存区域设置参数,该区域将保持各种键的状态。特别是,状态存储了当前的过度请求数。该key可以包含文本,变量或者它们的的组合。不考虑具有空键值的请求。
    http {
    	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    }
    

limit_req

  • 语法: limit_req zone zone=name [burst=number] [nodelay|delay=number];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置共享内存区域和请求的最大突发大小。如果请求速率超过为区域配置的速率,则它们的处理将被延迟,以便以定义的速率处理请求。过多的请求会被延迟,直到它们的数量超过最大突发大小,在这种情况下,请求会因错误而终止。默认情况下,最大突发大小为零。

limit_req_log_level

  • 语法: limit_req_log_level info|notice|warn|error;
  • 默认: limit_req_log_level error;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当服务器由于速率超过或延迟请求处理而拒绝处理请求时,设置所需的日志记录级别。延迟的记录级别比拒绝低一分;例如,如果limit_req_log_level notice指定了"",则延迟与info级别一起记录。

limit_req_status

  • 语法: limit_req_status code;
  • 默认: limit_req_status 503;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置状态代码以响应被拒绝的请求。

limit_req_dry_run

  • 语法: limit_req_dry_run on|off;
  • 默认: limit_req_dry_run off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用试运行模式。在这种模式下,请求处理速率不受限制,但是在共享内存区域中,过度请求的数量照常计算。

2.3.26、ngx_http_log_module模块

log_format

  • 语法: log_format name [escape=default|json|none] string [string …];
  • 参数说明:
    • escape – 表示设置为json或默认字符转义,默认情况下,使用默认转义
    • default – 对于默认转义,字符"、字符\ 和其它值小于32或大于126的字符将被转义为\xXX,如果没有找到变量值,将记录为连接字符(-
    • json – 对于json转义,json字符串中不允许出现的所有字符将被转义,比如说字符"和字符\将被转义为\"\\,值小于32的字符转义为\n\r\t\b\f\u00XX
    • none – 表示禁用转义
  • 默认: log_format combined “…”;
  • 上下文: http块
  • 说明: 指定日志格式。日志格式可以包含公共变量,以及仅在日志写入时存在的变量:
    1. $bytes_sent:发送到客户端的字节数
    2. $connection:连接序列号
    3. $connection_requests:当前通过连接发出的请求数
    4. $msec:日志写入时以秒为单位,以毫秒为分辨率的时间
    5. $pipe:值为"p"表示请求被流水线化,否则值为"."
    6. $request_length:请求长度(包括请求行、头部和请求正文)
    7. $request_time:请求处理时间(以秒为单位,以毫秒为分辨率),从客户端读取第一个字节到最后一个字节发送给客户端后写入日志之间的时间经过
    8. $status:响应状态
    9. $time_iso8601:ISO 8601标准格式的当地时间
    10. $time_local:通用日志格式的本地时间
    http {
    	# 配置始终包含预定义的"combined"格式,如下:
    	log_format combined '$remote_addr - $remote_user [$time_local] '
    						'"$request" $status $body_bytes_sent '
    						'"$http_referer" "$http_user_agent"';
    }
    

access_log

  • 语法: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
        access_log off;
  • 参数说明:
    • path – 表示文件路径,可以通过指定"syslog:"前缀来将日志写入到syslog
    • format – 表示指定日志格式,日志格式由log_format指令设置,如果没有指定格式,则使用预定义的"combined"格式
    • buffer – 表示设置缓冲区的大小,使用该参数后日志将被写到缓冲区,启用缓冲后,以下三种情况将导致数据被写入文件:如果下一个日志行不适合缓冲区;如果缓冲数据的时间超过了flush参数指定的时间;当工作进程重新打开日志文件或关闭时
    • gzip – 表示设置压缩的等级,取值范围为1~9,使用该参数后日志将被写到缓冲区
    • flush – 表示缓冲数据的最大时间
    • if – 表示是否启用条件日志记录,如果条件计算结果为"0"或空字符串,则不会记录请求
    • off – 表示取消当前级别上的所有access_log指令
  • 默认: access_log logs/access.log combined;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块、http块中的limit_except块
  • 说明: 设置缓冲日志写入的路径、格式和配置,可以在同一配置级别上指定多个日志。
    # 在下面的示例中,响应码为2xx和3xx的请求将不被记录
    http {
    	map $status $loggable {
    		~^[23]  0;
    		default 1;
    	}
    
    	access_log /path/to/access.log combined if=$loggable;
    }
    

open_log_file_cache

  • 语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
  • 参数说明:
    • max – 表示缓存中描述符的最大数量,如果缓存已满,则关闭最近最少使用的描述符(LRU)
    • inactive – 表示如果在此期间没有访问,则设置关闭缓存描述符,缺省值是10秒
    • min_uses – 表示在inactive参数定义的时间内文件使用的最小数量,以让描述符在缓存中保持打开状态,默认情况下为1
    • valid – 表示检查文件名是否仍然存在的时间,缺省为60秒
    • off – 表示禁用缓存
  • 默认: open_log_file_cache off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个缓存,用于存储名称包含变量的常用日志的文件描述符。
    http {
    	open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
    }
    

2.3.27、ngx_http_map_module模块

map

  • 语法: map string $variable { … };
  • 默认:
  • 上下文: http块
  • 说明: 创建一个新变量,其值取决于第一个参数中指定的一个或多个源变量的值。
    # 在下面的示例中,当响应码为2xx和3xx时,$loggable的值为0,其它情况下$loggable的值为1
    http {
    	map $status $loggable {
    		~^[23]  0;
    		default 1;
    	}
    }
    

map_hash_max_size

  • 语法: map_hash_max_size size;
  • 默认: map_hash_max_size 2048;
  • 上下文: http块
  • 说明: 设置映射变量哈希表的最大容量。

map_hash_bucket_size

  • 语法: map_hash_bucket_size size;
  • 默认: map_hash_bucket_size 32|64|128;
  • 上下文: http块
  • 说明: 设置映射变量哈希桶的容量。

2.3.28、ngx_http_memcached_module模块

memcached_pass

  • 语法: memcached_pass address;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块
  • 说明: 设置缓存服务器的地址,地址可以指定为域名或IP地址,也可以是UNIX域套接字。
    http {
    	server {
    		location / {
    			memcached_pass localhost:8888;
    			memcached_pass unix:/tmp/memcached.socket;
    		}
    	}
    }
    

memcached_bind

  • 语法: memcached_bind address [transparent ]|off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起与缓存服务器的连接
    • off – 表示取消了memcached_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向缓存服务器发起连接。
    http {
    	memcached_bind $remote_addr transparent;
    }
    

memcached_socket_keepalive

  • 语法: memcached_socket_keepalive on|off;
  • 默认: memcached_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到缓存服务器的连接配置"TCP keepalive"行为。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

memcached_connect_timeout

  • 语法: memcached_connect_timeout time;
  • 默认: memcached_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与缓存服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

memcached_send_timeout

  • 语法: memcached_send_timeout time;
  • 默认: memcached_send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将请求传输到缓存服务器的超时时间。这里指的是在两次连续写入操作之间间隔,而不是针对整个请求的传输。如果缓存服务器在此时间内没有收到任何消息,则连接关闭。

memcached_buffer_size

  • 语法: memcached_buffer_size size;
  • 默认: memcached_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从缓存服务器接收到的响应的缓冲区大小。一旦接收到响应,就同步地将其传递给客户机。

memcached_read_timeout

  • 语法: memcached_read_timeout time;
  • 默认: memcached_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从缓存服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果缓存服务器在此时间内没有传输任何内容,则连接关闭。

memcached_next_upstream

  • 语法: grpc_next_upstream error|timeout|invalid_response|not_found|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向服务器传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向服务器传递请求或读取响应头时发生超时
    • invalid_response – 表示服务器返回空或无效的响应
    • not_found – 表示在服务器上找不到响应
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: grpc_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在哪些情况下应将请求传递到下一个服务器。

memcached_next_upstream_tries

  • 语法: memcached_next_upstream_tries number;
  • 默认: memcached_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制将请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

memcached_next_upstream_timeout

  • 语法: memcached_next_upstream_timeout time;
  • 默认: memcached_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

memcached_gzip_flag

  • 语法: memcached_gzip_flag flag;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果缓存服务器响应中存在flag标志,则将"Content-Encoding"响应头字段的值设置为"gzip"。

2.3.29、ngx_http_mirror_module模块

mirror

  • 语法: mirror uri|off;
  • 默认: mirror off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 将原始请求拷贝到的指定的uri去,可以在相同的配置级别上指定多个镜像。

mirror_request_body

  • 语法: mirror_request_body on|off;
  • 默认: mirror_request_body on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否拷贝客户端的请求正文,启用后,将在创建镜像子请求之前读取客户端请求正文。在这种情况下,由proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering和uwsgi_request_buffering指令设置的未缓冲的客户端请求正文代理将被禁用。
    http {
    	server {
    		location / {
    			mirror /mirror;
    			proxy_pass http://backend;
    		}
    
    		location = /mirror {
    			internal;
    			proxy_pass http://test_backend$request_uri;
    		}
    	}
    }
    

2.3.30、ngx_http_mp4_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_mp4_module

mp4

  • 语法: mp4;
  • 默认:
  • 上下文: http块中的location块
  • 说明: 该模块为MP4格式文件提供伪流服务器端支持,这些文件通常具有.mp4、.m4v或.m4a的文件扩展名。

mp4_buffer_size

  • 语法: mp4_buffer_size size;
  • 默认: mp4_buffer_size 512K;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于处理MP4格式文件的缓冲区的初始大小。

mp4_max_buffer_size

  • 语法: mp4_max_buffer_size size;
  • 默认: mp4_max_buffer_size 10M;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在元数据处理期间,可能需要一个更大的缓冲区,它的大小不能超过该配置指令指定的大小,否则Nginx将返回500(Internal Server Error)错误,并记录以下日志。
    "/home/src/111.mp4" mp4 moov atom is too large:
    12583268, you may want to increase mp4_max_buffer_size
    

2.3.31、ngx_http_perl_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_perl_module
改模块需要 Perl 5.6.1 或更高版本,C编译器应该与用于构建Perl的编译器兼容

perl_modules

  • 语法: perl_modules path;
  • 默认:
  • 上下文: http块
  • 说明: 为Perl模块设置附加路径。

perl_require

  • 语法: perl_require module;
  • 默认:
  • 上下文: http块
  • 说明: 定义将在每次重新配置期间加载的模块的名称,同一级别可以存在多个perl_require指令。

perl

  • 语法: perl module::function|‘sub {…}’;
  • 默认:
  • 上下文: http块中的location块、http块中的limit_except块
  • 说明: 设置Perl处理程序。

perl_set

  • 语法: perl_set $variable module::function|‘sub {…}’;
  • 默认:
  • 上下文: http块
  • 说明: 为指定的变量设置Perl处理程序。

2.3.32、ngx_http_proxy_module模块

proxy_pass

  • 语法: proxy_pass uri;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块、http块中的limit_except块
  • 说明: 设置代理服务器的协议和地址以及应映射到的URI,可以指定"http"或"https",地址可以指定为域名或IP地址,也可以是UNIX域套接字。如果域名解析为多个地址,则所有地址都将以循环方式使用,此外,可以将地址指定为服务器组。
    http {
    	server {
    		location / {
    			proxy_pass http://localhost:8000/uri/;
    			proxy_pass http://unix:/tmp/backend.socket:/uri/;
    		}
    	}
    }
    

proxy_redirect

  • 语法: proxy_redirect default|off;
        proxy_redirect redirect replacement;
  • 参数说明:
    • default – 表示默认使用location指令和proxy_pass指令的参数进行替换,如果proxy_pass使用了变量,则不允许使用该参数
    • off – 表示取消了proxy_redirect指令从上一个配置级别继承的影响
    • redirect – 表示需要被替换的字符串
    • replacement – 表示替换后的字符串
  • 默认: proxy_redirect default;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置应在代理服务器响应的“Location”和“Refresh”标头字段中更改的值,同一级别可以存在多个proxy_redirect指令。
    假设代理服务器返回标头字段"Location: http://localhost:8000/two/some/uri/",则以下指令
    proxy_redirect http://localhost:8000/two/ http://frontend/one/;
    会将此字符串重写为"Location: http://frontend/one/some/uri/"。
    
    服务器名可以在替换字符串中省略,如下:
    proxy_redirect http://localhost:8000/two/ /;
    
    default参数表示默认使用location指令和proxy_pass指令的参数进行替换。因此,以下两种配置是等价的:
    location /one/ { 
    	proxy_pass http://upstream:port/two/; 
    	proxy_redirect default;
    }
    
    location /one/ { 
    	proxy_pass http://upstream:port/two/; 
    	proxy_redirect http://upstream:port/two/ /one/;
    
    redirect 和 replacement 都允许包含变量,如下:
    proxy_redirect http://localhost:8000/ http://$host:$server_port/;
    proxy_redirect http://$proxy_host:8000/ /;
    
    可以使用正则表达式指定该指令,在这种情况下,redirect应该以“ ~”符号开头以进行区分大小写的匹配,
    或者以“ ~*”符号开头以进行不区分大小写的匹配。正则表达式可以包含命名和位置捕获,并且replacement可以引用它们:
    proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
    proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example/$2;
    

proxy_cookie_domain

  • 语法: proxy_cookie_domain off;
        proxy_cookie_domain domain replacement;
  • 参数说明:
    • off – 表示取消了proxy_cookie_domain指令从上一个配置级别继承的影响
    • domain – 表示需要被替换的domain字段的属性
    • replacement – 表示替换后的字符串
  • 默认: proxy_cookie_domain off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置应在代理服务器响应的"Set-Cookie"报头字段的domain字段中更改的值,同一级别可以存在多个proxy_cookie_domain指令。如果可以对cookie应用多个指令,则将选择第一个匹配的指令。
    假设代理服务器返回的"Set-Cookie"头字段的值为"domain=localhost",该指令
    proxy_cookie_domain localhost example;
    将此属性重写为"domain=example"
    
    domain和replacement可以包含变量,示例如下:
    proxy_cookie_domain www.$host $host;
    
    也可以使用正则表达式指定该指令,在这种情况下,domain应从“ ~”符号开始。正则表达式可以包含命名和位置捕获,并且replacement可以引用它们,示例如下:
    proxy_cookie_domain ~\.(?P<sl_domain>[-0-9a-z]+\.[az]+)$ $sl_domain;
    

proxy_cookie_path

  • 语法: proxy_cookie_path off;
        proxy_cookie_path path replacement;
  • 参数说明:
    • off – 表示取消了proxy_cookie_path指令从上一个配置级别继承的影响
    • path – 表示字段的属性
    • replacement – 表示替换后的字符串
  • 默认: proxy_cookie_path off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置应在代理服务器响应的"Set-Cookie"报头字段的path字段中更改的值,同一级别可以存在多个proxy_cookie_path指令。如果可以对cookie应用多个指令,则将选择第一个匹配的指令。
    假设代理服务器返回的的"Set-Cookie"头字段的值为"path=/two/some/uri/",该指令
    proxy_cookie_path /two/ /;
    将此属性重写为"path=/some/uri/"
    
    path和replacement可以包含变量,示例如下:
    proxy_cookie_path $uri /some$uri;
    
    也可以使用正则表达式指定该指令,在这种情况下,path应该从“ ~”符号开始进行区分大小写的匹配,或者从“ ~*”符号开始进行不区分大小写的匹配。正则表达式可以包含命名和位置捕获,并且replacement可以引用它们:
    proxy_cookie_path ~*^/user/([^/]+) /u/$1;
    

proxy_store

  • 语法: proxy_store on|off|string;
  • 参数说明:
    • on – 表示将文件保存到alias或root对应的路径
    • off – 表示禁止保存文件
    • string – 表示显式地设置文件名,文件名可以使用变量来代替
  • 默认: proxy_store off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用将文件保存到磁盘。

proxy_store_access

  • 语法: proxy_store_access users:permissions [users:permissions …];
  • 默认: proxy_store_access user:rw;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为新创建的文件和目录设置访问权限。
    http {
    	server {
    		location ~ ^(.+\.php)(.*)$ {
    			...
    			# 正常设置权限
    			proxy_store_access user:rw group:rw all:r;
    			# 如果指定了任意group或all访问权限,则user可以省略权限
    			proxy_store_access group:rw all:r;
    		}
    	}
    }
    

proxy_buffering

  • 语法: proxy_buffering on|off;
  • 默认: proxy_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用来自代理服务器的响应缓冲。启用缓冲后,Nginx会尽快收到来自代理服务器的响应,将其保存到由proxy_buffer_size和proxy_buffers指令设置的缓冲区中。如果整个响应过大,可以将其中的一部分保存到磁盘上的临时文件中。写入临时文件由proxy_max_temp_file_size和 proxy_temp_file_write_size指令控制。当缓冲被禁用时,响应会在收到时立即同步传递给客户端。Mginx不会尝试从代理服务器读取整个响应。Nginx一次可以从服务器接收的最大数据大小由proxy_buffer_size指令设置。也可以通过在"X-Accel-Buffering"响应头字段中传递"yes"或"no"来启用或禁用缓冲。可以使用proxy_ignore_headers指令禁用此功能。

proxy_request_buffering

  • 语法: proxy_request_buffering on|off;
  • 默认: proxy_request_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用客户端请求正文的缓冲。启用缓冲后,在将请求发送到代理服务器之前,将从客户端读取整个请求正文。当缓存被禁用时,请求正文在收到时立即被发送到代理服务器。在这种情况下,如果Nginx已经开始发送请求正文,请求就不能被传递到下一个服务器。当使用HTTP/1.1分块传输编码发送原始请求正文时,请求正文将被缓冲,而不管该指令的值,除非HTTP/1.1启用代理。

proxy_ignore_client_abort

  • 语法: proxy_ignore_client_abort on|off;
  • 默认: proxy_ignore_client_abort off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定当客户端在不等待响应的情况下关闭连接时,是否应关闭与代理服务器的连接。

proxy_bind

  • 语法: proxy_bind address [transparent];
        proxy_bind off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起与代理服务器的连接
    • off – 表示取消了proxy_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向代理服务器发起连接。
    http {
    	proxy_bind $remote_addr transparent;
    }
    

proxy_socket_keepalive

  • 语法: proxy_socket_keepalive on|off;
  • 默认: proxy_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到代理服务器的连接配置"TCP keepalive"行为。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

proxy_connect_timeout

  • 语法: proxy_connect_timeout time;
  • 默认: proxy_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与代理服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

proxy_send_timeout

  • 语法: proxy_send_timeout time;
  • 默认: proxy_send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将请求传输到代理服务器的超时时间。这里指的是在两次连续写入操作之间间隔,而不是针对整个请求的传输。如果缓存服务器在此时间内没有收到任何消息,则连接关闭。

proxy_send_lowat

  • 语法: proxy_send_lowat size;
  • 默认: proxy_send_lowat 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 该指令在Linux上无效。

proxy_intercept_errors

  • 语法: proxy_intercept_errors on|off;
  • 默认: proxy_intercept_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定是否应该将响应码大于或等于300的代理服务器响应传递给客户端,或者拦截并重定向到Nginx以使用error_page指令进行处理。

proxy_set_header

  • 语法: proxy_set_header field value;
  • 默认: proxy_set_header Host $proxy_host;
        proxy_set_header Connection close;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许在传递给代理服务器的请求头中重新定义或附加字段,该值可以包含文本、变量或者它们的组合。当且仅当当前级别没有定义proxy_set_header指令时,这些指令从上一个配置级别继承。默认情况下,只有两个字段被重新定义。如果启用缓存,原始请求的报头字段"If-Modified-Since"、“If-Unmodified-Since”、“If-None-Match”、“If-Match”、"Range"和"If-Range"不会被传递到代理服务器。如果标头字段的值为空字符串,则该字段将不会传递给gRPC服务器。
    http {
    	# 一个未修改的"Host"请求报头字段可以像这样传递:
    	proxy_set_header Host       $http_host;
    	
    	# 在这种情况下,最好使用$host变量——它的值等于"Host"请求头字段中的服务器名,如果该字段不存在,则等于主服务器名:
    	proxy_set_header Host       $host;
    	
    	# 另外,服务器名可以和代理服务器的端口一起传递:
    	proxy_set_header Host       $host:$proxy_port;
    	
    	# 以下示例表示"Accept-Encoding"字段不会传递给代理服务器
    	grpc_set_header Accept-Encoding "";
    }
    

proxy_headers_hash_max_size

  • 语法: proxy_headers_hash_max_size size;
  • 默认: proxy_headers_hash_max_size 512;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置proxy_hide_header和proxy_set_header指令所使用的哈希表的最大容量。

proxy_headers_hash_bucket_size

  • 语法: proxy_headers_hash_bucket_size size;
  • 默认: proxy_headers_hash_bucket_size 64;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置proxy_hide_header和proxy_set_header指令所使用的哈希桶的容量。

proxy_set_body

  • 语法: proxy_set_body value;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许重新定义传递给代理服务器的请求正文,该值可以包含文本、变量或者它们的组合。

proxy_method

  • 语法: proxy_method method;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在转发到代理服务器的请求中使用的HTTP方法,而不是使用来自客户端请求的方法,参数值可以包含变量。

proxy_pass_request_headers

  • 语法: proxy_pass_request_headers on|off;
  • 默认: proxy_pass_request_headers on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求的报头字段传递给代理服务器。

proxy_pass_request_body

  • 语法: proxy_pass_request_body on|off;
  • 默认: proxy_pass_request_body on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求正文信息传递给代理服务器。

proxy_buffer_size

  • 语法: proxy_buffer_size size;
  • 默认: proxy_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从代理服务器接收的响应的第一部分的缓冲区的大小,这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

proxy_read_timeout

  • 语法: proxy_read_timeout time;
  • 默认: proxy_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从代理服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果缓存服务器在此时间内没有传输任何内容,则连接关闭。

proxy_buffers

  • 语法: proxy_buffers number size;
  • 默认: proxy_buffers 8 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为单个连接设置用于从代理服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

proxy_busy_buffers_size

  • 语法: proxy_busy_buffers_size size;
  • 默认: proxy_busy_buffers_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用了对来自代理服务器的响应的缓存时,该指令可以限制缓冲区的总大小,可以是正忙于发送到客户端的响应,而响应还没有完全读取。同时,其余的缓冲区可用于读取响应,如果需要,还可以缓冲对临时文件的部分响应。默认情况下,大小受proxy_buffer_size和proxy_buffers两个缓冲区大小的限制。

proxy_force_ranges

  • 语法: proxy_force_ranges on|off;
  • 默认: proxy_force_ranges off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 无论这些响应中的"Accept-Ranges"字段如何,都为来自代理服务器的缓存和未缓存响应启用字节范围支持。

proxy_limit_rate

  • 语法: proxy_limit_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: proxy_limit_rate 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制从代理服务器读取响应的速度。该限制是针对每个请求设置的,因此如果Nginx同时打开两个到代理服务器的连接,则总体速率将是指定限制的两倍。仅当启用了代理服务器的响应缓冲时,此限制才有效。

proxy_cache

  • 语法: proxy_cache zone|off;
  • 参数说明:
    • zone – 可以包含变量,表示缓存的区域
    • off – 表示禁用从先前配置级别继承缓存信息
  • 默认: proxy_cache off
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义用于缓存的共享内存区域,同一个区域可以在多个地方使用。

proxy_cache_key

  • 语法: proxy_cache_key string;
  • 默认: proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个用于缓存的键。

proxy_cache_path

  • 语法: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  • 默认:
  • 上下文: http块
  • 说明: 设置缓存的路径和其他参数,缓存数据存储在文件中,缓存中的文件名是对缓存键使用MD5函数生成的结果。

proxy_cache_bypass

  • 语法: proxy_cache_bypass string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不从缓存中获取响应的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会从缓存中获取响应。
    http {
    	proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
    	proxy_cache_bypass $http_pragma    $http_authorization;
    }
    

proxy_no_cache

  • 语法: proxy_no_cache string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不将响应保存到缓存的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会保存响应。
    http {
    	proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
    	proxy_no_cache $http_pragma    $http_authorization;
    }
    

proxy_cache_valid

  • 语法: proxy_cache_valid [code …] time;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为不同的响应码设置缓存时间。
    http {
    	# 为响应码200和302的响应信息设置10分钟的缓存
    	proxy_cache_valid 200 302 10m;
    	# 为响应码404的响应信息设置1分钟的缓存
    	proxy_cache_valid 404 1m;
    	
    	# 如果没有指定响应码,则只有200、301和302响应被缓存。
    	proxy_cache_valid 5m;
    	
    	# 可以指定any参数来表示缓存任何响应
    	proxy_cache_valid any 1m;
    }
    

proxy_cache_min_uses

  • 语法: proxy_cache_min_uses number;
  • 默认: proxy_cache_min_uses 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置一个请求数,当超过该请求数之后将缓存响应。

proxy_cache_max_range_offset

  • 语法: proxy_cache_max_range_offset number;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置字节范围请求的字节偏移量,如果范围超出了偏移量,范围请求将被传递到代理服务器,而响应将不会被缓存。

proxy_cache_use_stale

  • 语法: proxy_cache_use_stale error|timeout|invalid_header|updating|http_500|http_502|http_503|http_504|http_403|http_404|http_429|off …;
  • 默认: proxy_cache_use_stale off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在何种情况下可以在与代理服务器通信时使用过时的缓存响应,该指令的形参与proxy_next_upstream指令的形参匹配。此外,如果当前正在更新缓存响应,则更新参数允许使用过时的响应,这允许在更新缓存数据时最小化对代理服务器的访问数量。也可以在响应失效后在响应头中直接启用过期缓存响应,这比使用指令参数具有更低的优先级。"Cache-Control"报头字段的"stale-while-revalidate"扩展允许在当前正在更新的情况下使用陈旧的缓存响应,"Cache-Control"报头字段的"stale-if-error"扩展允许在出现错误时使用陈旧的缓存响应。当填充一个新的缓存元素时,为了最小化对代理服务器的访问次数,可以使用proxy_cache_lock指令。

proxy_cache_methods

  • 语法: proxy_cache_methods GET|HEAD|POST [GET|HEAD|POST …];
  • 默认: proxy_cache_methods GET HEAD;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果此指令中列出了客户端请求方法,则响应将被缓存。GET和HEAD方法始终添加到列表中,但建议明确指定它们。

proxy_cache_lock

  • 语法: proxy_cache_lock on|off;
  • 默认: proxy_cache_lock off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用时,一次只允许一个请求填充一个新的缓存元素,根据proxy_cache_key指令,通过传递一个请求到代理服务器。对同一个缓存元素的其它请求要么等待响应出现在缓存中,要么等待释放这个元素的缓存锁,直到proxy_cache_lock_timeout指令设置的时间到达。

proxy_cache_lock_timeout

  • 语法: proxy_cache_lock_timeout time;
  • 默认: proxy_cache_lock_timeout 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为proxy_cache_lock设置超时,当time过期时,请求将被传递到代理服务器,但是响应将不会被缓存。

proxy_cache_lock_age

  • 语法: proxy_cache_lock_age time;
  • 默认: proxy_cache_lock_age 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果上次传递给代理服务器用于填充新缓存元素的请求在指定的时间内没有完成,那么可能会再传递一个请求给代理服务器。

proxy_cache_revalidate

  • 语法: proxy_cache_revalidate on|off;
  • 默认: proxy_cache_revalidate off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许使用带有"If-Modified-Since"和"If-None-Match"头字段的条件请求重新验证过期的缓存项。

proxy_cache_convert_head

  • 语法: proxy_cache_convert_head on|off;
  • 默认: proxy_cache_convert_head on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用"HEAD"方法到"GET"方法的缓存转换。当转换被禁用时,缓存键应该被配置为包含 $request_method

proxy_cache_background_update

  • 语法: proxy_cache_background_update on|off;
  • 默认: proxy_cache_background_update off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许启动后台子请求来更新过期的缓存项,同时将过期的缓存响应返回给客户端。注意,有必要允许在更新时使用陈旧的缓存响应。

proxy_temp_path

  • 语法: proxy_temp_path path [level1 [level2 [level3]]];
  • 默认: proxy_temp_path proxy_temp;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个目录用于存储从代理服务器接收到的数据的临时文件,最多可在指定目录下使用三层子目录层次结构。
    # 对于以下配置,临时文件可能为:/usr/local/nginx/proxy_temp/7/45/00000123457
    http {
    	proxy_temp_path /usr/local/nginx/proxy_temp 1 2;
    }
    

proxy_max_temp_file_size

  • 语法: proxy_max_temp_file_size size;
  • 参数说明:
    • size – 为0时表示禁止使用临时文件来缓冲响应信息
  • 默认: proxy_max_temp_file_size 1024m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当缓存来自代理服务器的响应是启用的,并且整个响应不适合proxy_buffer_size和proxy_buffers指令设置的缓冲区,响应的一部分可以保存到一个临时文件。这个指令设置的就是这个临时文件的最大大小。每次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。

proxy_temp_file_write_size

  • 语法: proxy_temp_file_write_size size;
  • 默认: proxy_temp_file_write_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当代理服务器的响应缓存到临时文件时,限制一次写入到临时文件的数据的大小。默认情况下,大小受proxy_buffer_size和proxy_buffers指令设置的两个缓冲区的限制。临时文件的最大大小是由proxy_max_temp_file_size指令设置的。

proxy_next_upstream

  • 语法: proxy_next_upstream error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_403|http_404|http_429|non_idempotent|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向其传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向其传递请求或读取响应标头时发生超时
    • invalid_header – 表示服务器返回空或无效的响应
    • http_500 – 表示服务器返回响应码为500的响应
    • http_502 – 表示服务器返回响应码为502的响应
    • http_503 – 表示服务器返回响应码为503的响应
    • http_504 – 表示服务器返回响应码为504的响应
    • http_403 – 表示服务器返回响应码为403的响应
    • http_404 – 表示服务器返回响应码为404的响应
    • http_429 – 表示服务器返回响应码为429的响应
    • non_idempotent – 通常,如果请求已发送到上游服务器,则使用“非幂等”方法( POST, LOCK, PATCH)的请求不会传递到下一个服务器,显式启用该参数允许重试此类请求
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: fastcgi_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在何种情况下应将请求传递给下一个服务器。

proxy_next_upstream_tries

  • 语法: proxy_next_upstream_tries number;
  • 默认: proxy_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

proxy_next_upstream_timeout

  • 语法: proxy_next_upstream_timeout time;
  • 默认: proxy_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

proxy_pass_header

  • 语法: proxy_pass_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许从代理服务器向客户端传递禁用的报头字段。

proxy_hide_header

  • 语法: proxy_hide_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,Nginx不从代理服务器传递拥有头字段"Date"、“Server”、"X-Pad"和"X-Accel-…"的响应到客户端。proxy_hide_header指令设置了其他不会被传递的字段。相反,如果需要允许字段的传递,则可以使用proxy_pass_header指令。

proxy_ignore_headers

  • 语法: proxy_ignore_headers field [field …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止处理代理服务器的某些响应报头字段,以下字段可以忽略:“X-Accel-Expires”、“X-Accel-Redirect”、“X-Accel-Limit-Rate”、“X-Accel-Buffering”、“X-Accel-Charset”、“Expires”、“Cache-Control”、“Set-Cookie"和"Vary”。如果未禁用,则处理这些报头字段具有以下效果:
    1. “X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”、"Vary"设置响应缓存的参数
    2. "X-Accel-Redirect"执行到指定URI的内部重定向
    3. "X-Accel-Limit-Rate"设置传输响应给客户端的速率限制
    4. "X-Accel-Buffering"启用或禁用响应缓冲
    5. "X-Accel-Charset"设置响应所需字符集

proxy_http_version

  • 语法: proxy_http_version 1.0|1.1;
  • 默认: proxy_http_version 1.0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,使用1.0版本。

proxy_ssl_session_reuse

  • 语法: proxy_ssl_session_reuse on|off;
  • 默认: proxy_ssl_session_reuse on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在使用代理服务器时SSL会话是否可以重用。如果日志中出现错误"SSL3_GET_FINISHED:digest check failed",请尝试禁用会话重用。

proxy_ssl_protocols

  • 语法: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为代理HTTPS服务器的请求启用指定的协议。

proxy_ssl_ciphers

  • 语法: proxy_ssl_ciphers ciphers;
  • 默认: proxy_ssl_ciphers DEFAULT;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定向代理HTTPS服务器请求时的启用密码,密码以OpenSSL库能够理解的格式指定。可以使用"openssl ciphers"命令查看完整列表。

proxy_ssl_name

  • 语法: proxy_ssl_name name;
  • 默认: proxy_ssl_name $proxy_host;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许覆盖用于验证代理HTTPS服务器的证书的服务器名,并在与代理HTTPS服务器建立连接时通过SNI传递。默认情况下,使用proxy_pass URL的主机部分。

proxy_ssl_server_name

  • 语法: proxy_ssl_server_name on|off;
  • 默认: proxy_ssl_server_name off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在与代理HTTPS服务器建立连接时,启用或禁用通过TLS服务器名指示扩展(SNI, RFC 6066)传递服务器名称。

proxy_ssl_verify

  • 语法: proxy_ssl_verify on|off;
  • 默认: proxy_ssl_verify off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用对代理HTTPS服务器证书的验证。

proxy_ssl_verify_depth

  • 语法: proxy_ssl_verify_depth number;
  • 默认: proxy_ssl_verify_depth 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置代理HTTPS服务器证书链中的验证深度。

proxy_ssl_trusted_certificate

  • 语法: proxy_ssl_trusted_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证代理HTTPS服务器的证书。

proxy_ssl_crl

  • 语法: proxy_ssl_crl file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证代理HTTPS服务器的证书。

proxy_ssl_certificate

  • 语法: proxy_ssl_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的证书用于验证代理HTTPS服务器的证书。

proxy_ssl_certificate_key

  • 语法: proxy_ssl_certificate_key file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的带密钥的证书用于验证代理HTTPS服务器的证书。可以指定值engine:name:id代替文件,它从OpenSSL engine name中加载具有指定id的密钥。

proxy_ssl_password_file

  • 语法: proxy_ssl_password_file file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

2.3.33、ngx_http_random_index_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_random_index_module

random_index

  • 语法: random_index on|off;
  • 默认: random_index off;
  • 上下文: http块中的location块
  • 说明: 该模块处理以字符(’/’)结尾的请求,并在目录中随机选取一个文件作为索引文件。该模块处理比ngx_http_index_module模块之前早。

2.3.34、ngx_http_realip_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_realip_module

set_real_ip_from

  • 语法: set_real_ip_from address|CIDR|unix:;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义已知可发送正确替换地址的可信地址,如果指定了特殊值unix:,表示所有unix域套接字都是可信的,可信地址也可以使用主机名来指定。

real_ip_header

  • 语法: set_real_ip_from field|X-Real-IP|X-Forwarded-For|proxy_protocol;
  • 默认: real_ip_header X-Real-IP;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义请求报头字段,其值将用于替换客户端地址,包含可选端口的请求报头字段值也用于替换客户端端口,地址和端口应该根据RFC 3986来指定,proxy_protocol参数将客户端地址更改为来自PROXY协议头的地址,PROXY协议之前必须通过在listen指令中设置proxy_protocol参数来启用。

real_ip_recursive

  • 语法: real_ip_recursive on|off;
  • 默认: real_ip_recursive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果禁用递归搜索,与其中一个受信任地址匹配的原始客户端地址将被real_ip_header指令定义的请求报头字段中发送的最后一个地址替换;如果启用了递归搜索,与其中一个可信地址匹配的原始客户端地址将被请求报头字段中发送的最后一个非可信地址替换。

2.3.35、ngx_http_referer_module模块

valid_referers

  • 语法: valid_referers none|blocked|server_names|string [none|blocked|server_names|string …];
  • 参数说明:
    • none – 表示请求标头中缺少"Referer"字段
    • blocked – 表示请求头中存在"Referer"字段,但其值已被防火墙或代理服务器删除,此类值是不以"http://"或"https://"开头的字符串
    • server_names – 表示"Referer"请求头字段包含服务器名称之一
    • string – 表示定义一个服务器名称和一个可选的URI前缀,服务器名可以在开头或结尾有一个"*",在检查过程中,"Referer"字段中的服务器端口被忽略
    • regex – 参数也可以使用正则表达式,第一个符号应该是"~",应该注意的是,表达式将匹配"http://"或"https://"之后的文本
  • 默认:
  • 上下文: http块中的server块、http块中的location块
  • 说明: 指定"Referer"请求头字段值,这会导致内嵌的 $invalid_referer 变量被设置为空字符串,否则,变量将被设置为"1"。搜索匹配是不区分大小写的。
    http {
    	server {
    		valid_referers none blocked server_names *.example example.* www.example/galleries/ ~\.google\.;
    	}
    }
    

referer_hash_max_size

  • 语法: referer_hash_max_size size;
  • 默认: referer_hash_max_size 2048;
  • 上下文: http块中的server块、http块中的location块
  • 说明: 设置有效引用哈希表的最大容量。

referer_hash_bucket_size

  • 语法: referer_hash_bucket_size size;
  • 默认: referer_hash_bucket_size 64;
  • 上下文: http块中的server块、http块中的location块
  • 说明: 设置有效引用哈希桶的容量。

2.3.36、ngx_http_rewrite_module模块

rewrite

  • 语法: rewrite regex replacement [flag];
  • 参数说明:
    • regex – 表示需匹配的正则表达式
    • replacement – 表示替换后的字符串,可以包含变量
    • flag – 的可选项如下:
      1. last:停止处理当前的ngx_http_rewrite_module指令集,并开始搜索与更改的URI匹配的新位置
      2. break:停止处理当前的ngx_http_rewrite_module指令,就像其它语言的break指令一样
      3. redirect:返回302响应码的临时重定向,如果替换字符串不是以"http://"、"https://“或”$scheme"开头,则使用
      4. permanent:返回一个带有301响应码的永久重定向
  • 默认:
  • 上下文: http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 如果指定的正则表达式与请求的URI匹配,URI将按照替换字符串中的指定进行更改。重写指令按照它们在配置文件中出现的顺序依次执行,可以使用标志终止对指令的进一步处理。如果替换字符串以"http://"、"https://“或”$scheme"开头,则停止处理并将重定向返回给客户端。
    http {
    	server {
    		...
    		rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    		rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    		return  403;
    		...
    	}
    }
    # 如果上述指令放在URI为"/download/"的location中,last标志应该被替换break,否则Nginx将进行10个循环并返回500错误:
    http {
    	server {
    		location /download/ {
    		rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
    		rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
    		return  403;
    		}
    	}
    }
    
    # 如果replacement字符串包含新的请求参数,则先前的请求参数会附加在它们之后。如果这是不希望的,在替换字符串的末尾放置一个问号可以避免附加它们,例如:
    http {
    	server {
    		...
    		rewrite ^/users/(.*)$ /show?user=$1? last;
    		...
    	}
    }
    
    # 如果正则表达式包含"}"或";"字符,则整个表达式应该用单引号或双引号括起来
    

return

  • 语法: return code [text];
        return code URL;
        return URL;
  • 默认:
  • 上下文: http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 停止处理并将指定的返回code给客户端,非标准响应码444关闭连接而不发送响应头。可以指定重定向URL(对于代码301、302、303、307和308)或响应正文文本(对于其他代码),响应正文文本和重定向URL都可以包含变量。作为一种特殊情况,可以将重定向URL指定为该服务器的本地URI,在这种情况下,完整的重定向URL根据请求方案($scheme)和server_name_in_redirect和port_in_redirect指令形成。另外,一个代码为302的临时重定向URL可以指定为唯一的参数,该参数应以"http://"、"https://“或”$scheme"字符串开头。

break

  • 语法: break;
  • 默认:
  • 上下文: http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 停止处理当前的ngx_http_rewrite_module指令集。

if

  • 语法: if (condition) {…};
  • 默认:
  • 上下文: http块中的server块、http块中的location块
  • 说明: 计算指定的条件,如果为true,则执行括号内指定的模块指令,请求将在if指令内分配配置,if指令中的配置是从上一个配置级别继承来的。条件可以是以下任何一种:
    1. 变量名,如果变量的值为空字符串或"0",则为false;
    2. 使用"=“和”!="运算符将变量与字符串进行比较;
    3. 使用"~"(区分大小写匹配)和"~*"(不区分大小写匹配)运算符将变量与正则表达式匹配,正则表达式可以包含可供以后在$1…$9变量中重用的捕获,负运算符"!~“和”!~*“也可用,如果正则表达式包含”}“或”;"字符,则整个表达式应该用单引号或双引号括起来;
    4. 使用"-f"和"!-f"运算符检查文件是否存在;
    5. 使用"-d"和"!-d"运算符检查目录是否存在;
    6. 使用"-e"和"!-e"运算符检查文件、目录或符号链接是否存在;
    7. 使用"-x"和"!-x"运算符检查可执行文件

set

  • 语法: set $variable value;
  • 默认:
  • 上下文: http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 设置指定变量的值,该值可以包含文本、变量或者它们的组合。

rewrite_log

  • 语法: rewrite_log on|off;
  • 默认: rewrite_log off;
  • 上下文: http块、http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 启用或禁用将ngx_http_rewrite_module模块指令处理结果记录到级别为notice的error_log中。

uninitialized_variable_warn

  • 语法: uninitialized_variable_warn on|off;
  • 默认: uninitialized_variable_warn on;
  • 上下文: http块、http块中的server块、http块中的server块中的if块、http块中的location块、http块中的location块中的if块
  • 说明: 控制是否记录有关未初始化变量的警告。

2.3.36、ngx_http_scgi_module模块

scgi_pass

  • 语法: scgi_pass address;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块
  • 说明: 设置SCGI服务器的地址,地址可以指定为域名或IP地址,也可以是UNIX域套接字。如果域名解析为多个地址,则所有地址都将以循环方式使用,此外,可以将地址指定为服务器组。
    http {
    	server {
    		location / {
    			scgi_pass localhost:9000;
    			scgi_pass unix:/tmp/scgi.socket;
    		}
    	}
    }
    

scgi_store

  • 语法: scgi_store on|off|string;
  • 参数说明:
    • on – 表示将文件保存到alias或root对应的路径
    • off – 表示禁止保存文件
    • string – 表示显式地设置文件名,文件名可以使用变量来代替
  • 默认: scgi_store off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁止将文件保存到磁盘。

scgi_store_access

  • 语法: scgi_store_access users:permissions [users:permissions …];
  • 默认: scgi_store_access user:rw;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为新创建的文件和目录设置访问权限。
    http {
    	server {
    		location ~ ^(.+\.php)(.*)$ {
    			...
    			# 正常设置权限
    			scgi_store_access user:rw group:rw all:r;
    			# 如果指定了任意group或all访问权限,则user可以省略权限
    			scgi_store_access group:rw all:r;
    		}
    	}
    }
    

scgi_request_buffering

  • 语法: scgi_request_buffering on|off;
  • 默认: scgi_request_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用客户端请求正文的缓冲。启用缓冲后,在将请求发送到SCGI服务器之前,将从客户端读取整个请求正文。当缓冲被禁用时,请求正文在收到时立即发送到SCGI服务器。在这种情况下,如果Nginx已经开始发送请求正文,则请求无法传递到下一个服务器。

scgi_ignore_client_abort

  • 语法: scgi_ignore_client_abort on|off;
  • 默认: scgi_ignore_client_abort off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定当客户端在不等待响应的情况下关闭连接时,是否应关闭与SCGI服务器的连接。

scgi_bind

  • 语法: scgi_bind address [transparent];
        scgi_bind off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起与SCGI服务器的连接
    • off – 表示取消了scgi_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向SCGI服务器发起连接。
    http {
    	scgi_bind $remote_addr transparent;
    }
    

scgi_socket_keepalive

  • 语法: scgi_socket_keepalive on|off;
  • 默认: scgi_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到SCGI服务器的连接配置"TCP keepalive"行为。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

scgi_connect_timeout

  • 语法: scgi_connect_timeout time;
  • 默认: scgi_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与SCGI服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

scgi_send_timeout

  • 语法: scgi_send_timeout time;
  • 默认: scgi_send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将请求传输到SCGI服务器的超时时间。这里指的是在两次连续写入操作之间间隔,而不是针对整个请求的传输。如果缓存服务器在此时间内没有收到任何消息,则连接关闭。

scgi_buffer_size

  • 语法: scgi_buffer_size size;
  • 默认: scgi_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从SCGI服务器接收的响应的第一部分的缓冲区的大小,这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

scgi_pass_request_headers

  • 语法: scgi_pass_request_headers on|off;
  • 默认: scgi_pass_request_headers on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求的报头字段传递给SCGI服务器。

scgi_pass_request_body

  • 语法: scgi_pass_request_body on|off;
  • 默认: scgi_pass_request_body on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求正文信息传递给SCGI服务器。

scgi_intercept_errors

  • 语法: scgi_intercept_errors on|off;
  • 默认: scgi_intercept_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定是否应该将响应码大于或等于300的SCGI服务器响应传递给客户端,或者拦截并重定向到Nginx以使用error_page指令进行处理。

scgi_read_timeout

  • 语法: scgi_read_timeout time;
  • 默认: scgi_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从SCGI服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果SCGI服务器在此时间内没有传输任何内容,则连接关闭。

scgi_buffers

  • 语法: scgi_buffers number size;
  • 默认: scgi_buffers 8 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为单个连接设置用于从SCGI服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

scgi_busy_buffers_size

  • 语法: scgi_busy_buffers_size size;
  • 默认: scgi_busy_buffers_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用了对来自SCGI服务器的响应的缓存时,该指令可以限制缓冲区的总大小,可以是正忙于发送到客户端的响应,而响应还没有完全读取。同时,其余的缓冲区可用于读取响应,如果需要,还可以缓冲对临时文件的部分响应。默认情况下,大小受scgi_buffer_size和scgi_buffers两个缓冲区大小的限制。

scgi_force_ranges

  • 语法: scgi_force_ranges on|off;
  • 默认: scgi_force_ranges off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 无论这些响应中的"Accept-Ranges"字段如何,都为来自SCGI服务器的缓存和未缓存响应启用字节范围支持。

scgi_limit_rate

  • 语法: scgi_limit_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: scgi_limit_rate 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制从SCGI服务器读取响应的速度。该限制是针对每个请求设置的,因此如果Nginx同时打开两个到SCGI服务器的连接,则总体速率将是指定限制的两倍。仅当启用了SCGI服务器的响应缓冲时,此限制才有效。

scgi_cache

  • 语法: scgi_cache zone|off;
  • 参数说明:
    • zone – 表示缓存的区域,可以包含变量
    • off – 表示禁用从先前配置级别继承缓存信息
  • 默认: scgi_cache off
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义用于缓存的共享内存区域,同一个区域可以在多个地方使用。

scgi_cache_key

  • 语法: scgi_cache_key string;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个用于缓存的键。

scgi_cache_path

  • 语法: scgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  • 默认:
  • 上下文: http块
  • 说明: 设置缓存的路径和其他参数,缓存数据存储在文件中,缓存中的文件名是对缓存键使用MD5函数生成的结果。

scgi_cache_bypass

  • 语法: scgi_cache_bypass string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不从缓存中获取响应的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会从缓存中获取响应。
    http {
    	scgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
    	scgi_cache_bypass $http_pragma    $http_authorization;
    }
    

scgi_no_cache

  • 语法: scgi_no_cache string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不将响应保存到缓存的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会保存响应。
    http {
    	scgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
    	scgi_no_cache $http_pragma    $http_authorization;
    }
    

scgi_cache_valid

  • 语法: scgi_cache_valid [code …] time;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为不同的响应码设置缓存时间。
    http {
    	# 为响应码200和302的响应信息设置10分钟的缓存
    	scgi_cache_valid 200 302 10m;
    	# 为响应码404的响应信息设置1分钟的缓存
    	scgi_cache_valid 404 1m;
    	
    	# 如果没有指定响应码,则只有200、301和302响应被缓存。
    	scgi_cache_valid 5m;
    	
    	# 可以指定any参数来表示缓存任何响应
    	scgi_cache_valid any 1m;
    }
    

scgi_cache_min_uses

  • 语法: scgi_cache_min_uses number;
  • 默认: scgi_cache_min_uses 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置一个请求数,当超过该请求数之后将缓存响应。

scgi_cache_max_range_offset

  • 语法: scgi_cache_max_range_offset number;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置字节范围请求的字节偏移量,如果范围超出了偏移量,范围请求将被传递到SCGI服务器,而响应将不会被缓存。

scgi_cache_use_stale

  • 语法: scgi_cache_use_stale error|timeout|invalid_header|updating|http_500|http_503|http_403|http_404|http_429|off …;
  • 默认: scgi_cache_use_stale off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在何种情况下可以在与SCGI服务器通信时使用过时的缓存响应,该指令的形参与scgi_next_upstream指令的形参匹配。此外,如果当前正在更新缓存响应,则更新参数允许使用过时的响应,这允许在更新缓存数据时最小化对SCGI服务器的访问数量。也可以在响应失效后在响应头中直接启用过期缓存响应,这比使用指令参数具有更低的优先级。"Cache-Control"报头字段的"stale-while-revalidate"扩展允许在当前正在更新的情况下使用陈旧的缓存响应,"Cache-Control"报头字段的"stale-if-error"扩展允许在出现错误时使用陈旧的缓存响应。当填充一个新的缓存元素时,为了最小化对SCGI服务器的访问次数,可以使用scgi_cache_lock指令。

scgi_cache_methods

  • 语法: scgi_cache_methods GET|HEAD|POST [GET|HEAD|POST …];
  • 默认: scgi_cache_methods GET HEAD;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果此指令中列出了客户端请求方法,则响应将被缓存。GET和HEAD方法始终添加到列表中,但建议明确指定它们。

scgi_cache_lock

  • 语法: scgi_cache_lock on|off;
  • 默认: scgi_cache_lock off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用时,一次只允许一个请求填充一个新的缓存元素,根据scgi_cache_key指令,通过传递一个请求到SCGI服务器。对同一个缓存元素的其它请求要么等待响应出现在缓存中,要么等待释放这个元素的缓存锁,直到scgi_cache_lock_timeout指令设置的时间到达。

scgi_cache_lock_timeout

  • 语法: scgi_cache_lock_timeout time;
  • 默认: scgi_cache_lock_timeout 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为scgi_cache_lock设置超时,当time过期时,请求将被传递到SCGI服务器,但是响应将不会被缓存。

scgi_cache_lock_age

  • 语法: scgi_cache_lock_age time;
  • 默认: scgi_cache_lock_age 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果上次传递给SCGI服务器用于填充新缓存元素的请求在指定的时间内没有完成,那么可能会再传递一个请求给SCGI服务器。

scgi_cache_revalidate

  • 语法: scgi_cache_revalidate on|off;
  • 默认: scgi_cache_revalidate off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许使用带有"If-Modified-Since"和"If-None-Match"头字段的条件请求重新验证过期的缓存项。

scgi_cache_background_update

  • 语法: scgi_cache_background_update on|off;
  • 默认: scgi_cache_background_update off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许启动后台子请求来更新过期的缓存项,同时将过期的缓存响应返回给客户端。注意,有必要允许在更新时使用陈旧的缓存响应。

scgi_temp_path

  • 语法: scgi_temp_path path [level1 [level2 [level3]]];
  • 默认: scgi_temp_path scgi_temp;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个目录用于存储从SCGI服务器接收到的数据的临时文件,最多可在指定目录下使用三层子目录层次结构。
    # 对于以下配置,临时文件可能为:/usr/local/nginx/scgi_temp/7/45/00000123457
    http {
    	scgi_temp_path /usr/local/nginx/scgi_temp 1 2;
    }
    

scgi_max_temp_file_size

  • 语法: scgi_max_temp_file_size size;
  • 参数说明:
    • size – 为0时表示禁止使用临时文件来缓冲响应信息
  • 默认: scgi_max_temp_file_size 1024m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当缓存来自SCGI服务器的响应是启用的,并且整个响应不适合scgi_buffer_size和scgi_buffers指令设置的缓冲区,响应的一部分可以保存到一个临时文件。这个指令设置的就是这个临时文件的最大大小。每次写入临时文件的数据大小由scgi_temp_file_write_size指令设置。

scgi_temp_file_write_size

  • 语法: scgi_temp_file_write_size size;
  • 默认: scgi_temp_file_write_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当SCGI服务器的响应缓存到临时文件时,限制一次写入到临时文件的数据的大小。默认情况下,大小受scgi_buffer_size和scgi_buffers指令设置的两个缓冲区的限制。临时文件的最大大小是由scgi_max_temp_file_size指令设置的。

scgi_next_upstream

  • 语法: scgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_403|http_404|http_429|non_idempotent|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向其传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向其传递请求或读取响应标头时发生超时
    • invalid_header – 表示服务器返回空或无效的响应
    • http_500 – 表示服务器返回响应码为500的响应
    • http_503 – 表示服务器返回响应码为503的响应
    • http_403 – 表示服务器返回响应码为403的响应
    • http_404 – 表示服务器返回响应码为404的响应
    • http_429 – 表示服务器返回响应码为429的响应
    • non_idempotent – 通常,如果请求已发送到上游服务器,则使用“非幂等”方法( POST, LOCK, PATCH)的请求不会传递到下一个服务器,显式启用该参数允许重试此类请求
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: scgi_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在何种情况下应将请求传递给下一个服务器。

scgi_next_upstream_tries

  • 语法: scgi_next_upstream_tries number;
  • 默认: scgi_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

scgi_next_upstream_timeout

  • 语法: scgi_next_upstream_timeout time;
  • 默认: scgi_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

scgi_param

  • 语法: scgi_param parameter value [if_not_empty];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置应该传递给SCGI服务器的参数,该值可以包含文本、变量或者它们的组合,当且仅当当前级别没有定义scgi_param指令时,这些指令从上一个配置级别继承。

scgi_pass_header

  • 语法: scgi_pass_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许从SCGI服务器向客户端传递禁用的报头字段。

scgi_hide_header

  • 语法: scgi_hide_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,Nginx不从SCGI服务器传递拥有头字段"Status"和"X-Accel-…"的响应到客户端。scgi_hide_header指令设置了其他不会被传递的字段。相反,如果需要允许字段的传递,则可以使用scgi_pass_header指令。

scgi_ignore_headers

  • 语法: scgi_ignore_headers field [field …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止处理SCGI服务器的某些响应报头字段,以下字段可以忽略:“X-Accel-Expires”、“X-Accel-Redirect”、“X-Accel-Limit-Rate”、“X-Accel-Buffering”、“X-Accel-Charset”、“Expires”、“Cache-Control”、“Set-Cookie"和"Vary”。如果未禁用,则处理这些报头字段具有以下效果:
    1. “X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”、"Vary"设置响应缓存的参数
    2. "X-Accel-Redirect"执行到指定URI的内部重定向
    3. "X-Accel-Limit-Rate"设置传输响应给客户端的速率限制
    4. "X-Accel-Buffering"启用或禁用响应缓冲
    5. "X-Accel-Charset"设置响应所需字符集

2.3.37、ngx_http_secure_link_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_secure_link_module

secure_link

  • 语法: secure_link expression;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个带有变量的字符串,将从中提取链接的校验和值和生命周期。从字符串中提取的校验和的值与由secure_link_md5指令定义的表达式的MD5值进行比较,如果校验和不同,则将该 $secure_link 变量设置为空字符串;如果校验和相同,则检查链路寿命,如果链接的生命周期有限且时间已过,则将该 $secure_link 变量设置为"0",否则设置为"1"。请求中传递的MD5值以base64url编码。如果链接的生命周期有限,则过期时间设置为自Epoch(Thu, 01 Jan 1970 00:00:00 GMT)以来的秒数,该值在MD5哈后的表达式中指定,并用逗号分隔。请求中传递的到期时间可通过 $secure_link_expires 变量获得,以便在secure_link_md5指令中使用。如果未指定到期时间,则链接具有无限的生命周期。

secure_link_md5

  • 语法: secure_link_md5 expression;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个表达式,用于计算MD5值并将其与请求中传递的值进行比较。表达式应该包含一个链接(资源)的安全部分和一个秘密成分,如果链接有一个有限的生存期,表达式还应该包含 $secure_link_expires 。为了防止未经授权的访问,该表达式可能包含有关客户端的一些信息,例如其地址和浏览器版本。

secure_link_secret

  • 语法: secure_link_secret word;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个用于检查请求链接真实性的秘密词。请求链接的完整URI示例如下:/prefix/hash/link。其中hash是MD5值的十六进制表示形式,该哈希值计算用于串联计算链接和秘密词,并且prefix是不带斜杠的任意字符串。如果请求的链接通过了真实性检查,则该 $secure_link 变量将设置为从请求URI中提取的链接,否则, $secure_link 变量被设置为一个空字符串。
    # 对于以下示例,"/p/5e814704a28d9bc1914ff19fa0c4a00a/link"的请求将在内部重定向到"/secure/link"
    http {
    	server {
    		location /p/ {
    			secure_link_secret secret;
    
    			if ($secure_link = "") {
    				return 403;
    			}
    
    			rewrite ^ /secure/$secure_link;
    		}
    
    		location /secure/ {
    			internal;
    		}
    	}
    }
    
    # 在UNIX上,可以通过以下方式获得此示例的哈希值:
    echo -n 'linksecret' | openssl md5 -hex
    

2.3.38、ngx_http_slice_filter_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_slice_filter_module

slice

  • 语法: slice size;
  • 默认: slice 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置切片的大小,size为0时表示禁止将响应分割为片。需要注意的是,设置的值过低可能会导致内存占用过多,打开大量文件。为了让子请求返回所需的范围,应该将 $slice_range 变量作为范围请求头字段传递给代理服务器。如果启用了缓存, $slice_range 应该添加到缓存键中,并且启用状态码206的响应的缓存。
    # 在以下示例中,响应被分割成1M字节的可缓存切片
    http {
    	server {
    		location / {
    			slice             1m;
    			proxy_cache       cache;
    			proxy_cache_key   $uri$is_args$args$slice_range;
    			proxy_set_header  Range $slice_range;
    			proxy_cache_valid 200 206 1h;
    			proxy_pass        http://localhost:8000;
    		}
    	}
    }
    

2.3.39、ngx_http_split_clients_module模块

split_clients

  • 语法: split_clients string $variable {…}
  • 默认:
  • 上下文: http块
  • 说明: 为A/B测试创建一个变量。
    # 原始字符串的值使用MurmurHash2哈希。在以下示例中,散列值从0到21474835(0.5%)对应于值".one"的的$variant变量,散列值从21474836到107374180(2%)对应于值".two",并且散列值从107374181到4294967295对应于值""(空字符串)。
    http {
    	split_clients "${remote_addr}AAA" $variant {
    				0.5%               .one;
    				2.0%               .two;
    				*                  "";
    	}
    }
    

2.3.40、ngx_http_ssi_filter_module模块

ssi

  • 语法: ssi on|off;
  • 默认: ssi off;
  • 上下文: http块、http块中的server块、http块中的location块、http块中的location块中的if块
  • 说明: 启用或禁用响应中SSI命令的处理。

ssi_silent_errors

  • 语法: ssi_silent_errors on|off;
  • 默认: ssi_silent_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用之后,如果在SSI处理过程中发生错误,则禁止"[an error occurred while processing the directive]"字符串的输出。

ssi_ignore_recycled_buffers

  • 语法: ssi_ignore_recycled_buffers on|off;
  • 默认: ssi_ignore_recycled_buffers off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当设置为on时,阻止Nginx使用回收的缓冲区。

ssi_min_file_chunk

  • 语法: ssi_min_file_chunk size;
  • 默认: ssi_min_file_chunk 1k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置存储在磁盘上的响应部分的最小大小,从这里开始使用sendfile发送响应。

ssi_value_length

  • 语法: ssi_value_length length;
  • 默认: ssi_value_length 256;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置SSI命令中参数值的最大长度。

ssi_types

  • 语法: ssi_types mime-type [mime-type …];
  • 默认: ssi_types text/html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 除了"text/html"外,还可以处理具有指定MIME类型的响应中的SSI命令,特殊值"*"表示匹配任何MIME类型。

ssi_last_modified

  • 语法: ssi_last_modified on|off;
  • 默认: ssi_last_modified off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许在SSI处理期间保留原始响应中的"Last-Modified"标头字段,以促进响应缓存。默认情况下,当响应的内容在处理过程中被修改时,报头字段将被删除,并且可能包含独立于原始响应而动态生成的元素或部分。

2.3.41、ngx_http_ssl_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_ssl_module

ssl

  • 语法: ssl on|off;
  • 默认: ssl off;
  • 上下文: http块、http块中的server块
  • 说明: 该指令在1.15.0后的版本中已过时,应该使用listen指令的ssl参数来代替。

ssl_certificate

  • 语法: ssl_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 为给定的虚拟服务器指定PEM格式的证书文件。如果除主证书外还应指定中间证书,则应按以下顺序在同一文件中指定它们:首先是主证书,然后是中间证书。PEM格式的密钥可以放在同一个文件中。可以在参数file中使用变量。

ssl_certificate_key

  • 语法: ssl_certificate_key file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 为给定的虚拟服务器指定PEM格式的密钥文件。可以指定值engine:name:id,而不是file,它从OpenSSL engine name中加载具有指定id的密钥。可以指定值data:$variable而不是file,该文件不使用中间文件从变量加载密钥,需要注意的是,这种语法的不适当使用可能会带来安全隐患,比如将密钥数据写入错误日志。可以在参数file中使用变量。

ssl_password_file

  • 语法: ssl_password_file file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

ssl_dhparam

  • 语法: ssl_dhparam file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 为DHE密码指定一个带有DH参数的文件,默认情况下,没有设置任何参数,因此不会使用DHE密码。

ssl_ecdh_curve

  • 语法: ssl_ecdh_curve curve;
  • 默认: ssl_ecdh_curve auto;
  • 上下文: http块、http块中的server块
  • 说明: 指定ECDHE密码的curve。特殊值auto指示Nginx在使用OpenSSL 1.0.2或更高版本时,或使用旧版本的prime256v1时,使用OpenSSL库中的内置列表。

ssl_protocols

  • 语法: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: http块、http块中的server块
  • 说明: 启用指定的协议。

ssl_ciphers

  • 语法: ssl_ciphers ciphers;
  • 默认: ssl_ciphers HIGH:!aNULL:!MD5;
  • 上下文: http块、http块中的server块
  • 说明: 指定启用的密码。密码以OpenSSL库理解的格式指定,可以使用"openssl ciphers"命令查看完整列表。
    http {
    	ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    }
    

ssl_buffer_size

  • 语法: ssl_buffer_size size;
  • 默认: ssl_buffer_size 16k;
  • 上下文: http块、http块中的server块
  • 说明: 设置用于发送数据的缓冲区的大小,默认情况下,缓冲区大小为16k,这对应于发送大响应时的最小开销,为了最小化到第一个字节的时间,使用较小的值可能是有益的。

ssl_verify_client

  • 语法: ssl_verify_client on|off|optional|optional_no_ca;
  • 默认: ssl_verify_client off;
  • 上下文: http块、http块中的server块
  • 说明: 允许验证客户端证书,验证结果存储在 $ssl_client_verify 变量中。参数optional表示请求客户端证书,并验证它是否存在证书。参数optional_no_ca表示请求客户端证书,但不要求它由受信任的CA证书签名,这适用于Nginx外部的服务执行实际证书验证的情况。证书的内容可以通过 $ssl_client_cert 变量访问。

ssl_verify_depth

  • 语法: ssl_verify_depth number;
  • 默认: ssl_verify_depth 1;
  • 上下文: http块、http块中的server块
  • 说明: 设置客户端证书链中的验证深度。

ssl_client_certificate

  • 语法: ssl_client_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书文件,该文件用于在启用ssl_stapling时验证客户端证书和OCSP响应。证书列表将发送给客户端,如果不希望这样,可以使用ssl_trusted_certificate指令。

ssl_trusted_certificate

  • 语法: ssl_trusted_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书文件,该文件用于在启用ssl_stapling时验证客户端证书和OCSP响应。与ssl_client_certificate设置的证书相反,这些证书的列表不会被发送到客户端。

ssl_prefer_server_ciphers

  • 语法: ssl_prefer_server_ciphers on|off;
  • 默认: ssl_prefer_server_ciphers off;
  • 上下文: http块、http块中的server块
  • 说明: 指定在使用SSLv3和TLS协议时,服务器密码应该优先于客户端密码。

ssl_session_cache

  • 语法: ssl_session_cache off|none|[builtin[:size]] [shared:name:size];
  • 参数说明:
    • off – 表示严格禁止使用会话缓存,Nginx明确告诉客户端会话不能被重用
    • none – 表示不允许使用会话缓存,Nginx告诉客户端可以重用会话,但实际上并不在缓存中存储会话参数
    • builtin – 表示一个内置于OpenSSL的缓存,仅由一个工作进程使用,缓存大小在会话中指定,如果未给出大小,则等于20480个会话,使用内置缓存可能会导致内存碎片
    • shared – 表示在所有工作进程之间共享的缓存,缓存大小以字节为单位,1M字节可以存储大约4000个会话,每个共享缓存应该有一个任意名称,同名缓存可用于多个虚拟服务器
  • 默认: ssl_session_cache none;
  • 上下文: http块、http块中的server块
  • 说明: 设置存储会话参数的缓存的类型和大小。

ssl_session_tickets

  • 语法: ssl_session_tickets on|off;
  • 默认: ssl_session_tickets on;
  • 上下文: http块、http块中的server块
  • 说明: 启用或禁用通过TLS会话票证恢复会话。

ssl_session_ticket_key

  • 语法: ssl_session_ticket_key file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 设置具有用于加密和解密TLS会话票据的秘钥的文件,如果多个服务器之间必须共享相同的密钥,那么该指令是必要的,缺省情况下,使用随机生成的密钥。
    http {
    	# 如果指定了几个密钥,则只使用第一个密钥加密TLS会话票证,这允许配置密钥轮换,例如:
    	ssl_session_ticket_key current.key;
    	ssl_session_ticket_key previous.key;
    	
    	# file必须包含80或48字节的随机数据,可以使用以下命令创建:
    	openssl rand 80 > ticket.key
    	
    	# 根据文件大小,使用AES256(对于80字节密钥)或AES128(对于48字节密钥)进行加密
    }
    

ssl_session_timeout

  • 语法: ssl_session_timeout time;
  • 默认: ssl_session_timeout 5m;
  • 上下文: http块、http块中的server块
  • 说明: 指定客户端可以重用会话参数的时间。

ssl_crl

  • 语法: ssl_crl file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证客户端的证书。

ssl_stapling

  • 语法: ssl_stapling on|off;
  • 默认: ssl_stapling off;
  • 上下文: http块、http块中的server块
  • 说明: 启用或禁用服务器对OCSP响应的装订。

ssl_stapling_file

  • 语法: ssl_stapling_file file;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 设置此参数后,装订的OCSP响应将从指定的文件获取,而不是查询服务器证书中指定的OCSP响应器。该文件应该是由"openssl ocsp"命令生成的DER格式。

ssl_stapling_responder

  • 语法: ssl_stapling_responder url;
  • 默认:
  • 上下文: http块、http块中的server块
  • 说明: 覆盖"Authority Information Access"证书扩展中指定的OCSP响应器的URL,只支持"http://"OCSP响应器。

ssl_stapling_verify

  • 语法: ssl_stapling_verify on|off;
  • 默认: ssl_stapling_verify off;
  • 上下文: http块、http块中的server块
  • 说明: 启用或禁用服务器对OCSP响应的验证。为了验证工作,服务器证书颁发者的证书、根证书和所有中间证书都应该使用ssl_trusted_certificate指令配置为受信任的。

ssl_early_data

  • 语法: ssl_early_data on|off;
  • 默认: ssl_early_data off;
  • 上下文: http块、http块中的server块
  • 说明: 启用或禁用TLS 1.3早期数据。

2.3.42、ngx_http_stub_status_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_stub_status_module

stub_status

  • 语法: stub_status;
  • 默认:
  • 上下文: http块中的server块、http块中的location块
  • 说明: 该模块提供对基本状态信息的访问。该模块提供以下状态信息:
    1. Active connections:当前活动客户端连接数,包括Waiting连接数。对应的变量为$connections_active
    2. accepts:接受的客户端连接总数
    3. handled:已处理的连接总数。通常,参数值与accept相同,除非达到了某些资源限制(例如,worker_connections限制)
    4. requests:客户端请求的总数
    5. Reading:Nginx正在读取请求头的当前连接数。对应的变量为$connections_reading
    6. Writing:Nginx将响应写回客户端的当前连接数。对应的变量为$connections_writing
    7. Waiting:当前等待请求的空闲客户端连接数。对应的变量为$connections_waiting
    http {
    	server {
    		location = /basic_status {
    			stub_status;
    		}
    	}
    }
    # 这个配置创建了一个简单的带有基本状态数据的网页,如下所示:
    Active connections: 291
    server accepts handled requests
     16630948 16630948 31070465
    Reading: 6 Writing: 179 Waiting: 106
    

2.3.43、ngx_http_sub_filter_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_sub_filter_module

sub_filter

  • 语法: sub_filter string replacement;
  • 参数说明:
    • string – 表示要被替换的字符串,可以包含变量
    • replacement – 表示替换后的字符串,可以包含变量
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置要替换的字符串和替换字符串,要替换的字符串匹配忽略大小写。可以在相同的配置级别上指定几个sub_filter指令。当且仅当当前级别没有定义sub_filter指令时,这些指令从上一个配置级别继承。

sub_filter_types

  • 语法: sub_filter_types mime-type [mime-type …];
  • 默认: sub_filter_types text/html;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 除了"text/html"之外,还使用指定的MIME类型在响应中启用字符串替换,特殊值"*"匹配任何MIME类型。

sub_filter_once

  • 语法: sub_filter_once on|off;
  • 默认: sub_filter_once on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 参数on表示替换第一个,参数off表示替换全部。

sub_filter_last_modified

  • 语法: sub_filter_last_modified on|off;
  • 默认: sub_filter_last_modified off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许在替换期间保留原始响应中的"Last-Modified"标头字段,以促进响应缓存。默认情况下,当响应的内容在处理过程中被修改时,头字段会被删除。

2.3.44、ngx_http_try_files_module模块

try_files

  • 语法: try_files file … uri;
        try_files file … =code;
  • 默认:
  • 上下文: http块中的server块、http块中的location块
  • 说明: 按指定顺序检查文件是否存在,并使用第一个找到的文件进行请求处理,处理是在当前上下文中执行的。文件的路径是根据root指令或alias指令以及参数file构造出来的,可以通过在名称末尾指定斜杠来检查目录是否存在,例如"$uri/"。如果没有找到任何文件,uri则进行到最后一个参数中指定的内部重定向。最后一个参数可以指向一个命名位置,也可以是一个code。
    http {
    	server {
    		location /images/ {
    			try_files $uri /images/default.gif;
    		}
    
    		location = /images/default.gif {
    			expires 30s;
    		}
    		
    		location / {
    			try_files $uri $uri/index.html $uri.html =404;
    		}
    	}
    }
    

2.3.45、ngx_http_upstream_module模块

upstream

  • 语法: upstream name {…}
  • 默认:
  • 上下文: http块
  • 说明: 定义一组服务器,服务器可以监听不同的端口,此外,侦听TCP和unix域套接字的服务器可以混合使用。
    # 默认情况下,请求使用加权轮循平衡方法在服务器之间分发。在以下示例中,每7个请求将按如下方式分配:
    # 5个请求发送到backend1.example,一个请求发送到第二个和第三个服务器。如果在与服务器通信期间发生错误,
    # 请求将被传递到下一个服务器,以此类推,直到尝试所有正常工作的服务器。如果无法从任何服务器获得成功的响应,
    # 客户机将收到与最后一个服务器通信的结果。
    http {
    	upstream backend {
    		server backend1.example weight=5;
    		server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    		server unix:/tmp/backend3;
    		server backup1.example  backup;
    	}
    }
    

server

  • 语法: server address [parameters];
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 定义服务器的地址和其他参数,该地址可以指定为带有可选端口域名或IP地址,也可以指定为"unix:"前缀后指定的UNIX域套接字路径,如果不指定端口,则默认使用80端口。解析为多个IP地址的域名同时定义了多个服务器。可以定义以下参数:
    1. weight=number:设置服务器的权重,默认为1
    2. max_conns=number:限制number到代理服务器的最大同时活动连接数,默认值为零,表示没有限制。如果服务器组不驻留在共享内存中,则限制适用于每个工作进程
    3. max_fails=number:设置在fail_timeout参数设置的持续时间内应该发生的与服务器通信的失败尝试次数,以考虑服务器在fail_timeout参数设置的持续时间内不可用。默认情况下,不成功尝试的次数设置为1,设置为0时表示禁用尝试记帐。被视为不成功的尝试由proxy_next_upstream、fastcgi_next_upstream、uwsgi_next_upstream、scgi_next_upstream、memcached_next_upstream和grpc_next_upstream指令定义。
    4. fail_timeout=time:该参数表示与服务器通信失败的指定次数发生的时间,认为服务器不可用;服务器将被视为不可用的时间段。默认情况下,该参数设置为10秒
    5. backup:将服务器标记为备份服务器,当主服务器不可用时,它将传递请求
    6. down:将服务器标记为永久不可用
    7. resolve:监控服务器域名对应的IP地址的变化,并自动修改upstream配置而不需要重新启动Nginx,服务器组必须位于共享内存中,为了让这个参数工作,resolver指令必须在http块或相应的upstream块中指定
    8. route=string:设置服务器路由名称
    9. service=name:启用解析DNS SRV记录并设置服务名,为了使该参数起作用,必须为服务器指定解析参数并指定不带端口号的主机名
    10. slow_start=time:设置服务器将其权重从0恢复到标称值的时间,即不正常的服务器变为正常的时间,或服务器在一段时间内被认为不可用后恢复可用的时间,默认值为0,即禁用慢启动
    11. drain:使服务器进入"draining"模式,在这种模式下,只有绑定到服务器的请求才会被代理到服务器

2.3.46、ngx_http_upstream_hash_module模块

hash

  • 语法: hash key [consistent];
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 为服务器组指定负载均衡方法,其中客户端-服务器的映射是基于hash key的。key可以包含文本、变量或者它们的组合。需要注意的是,从组中添加或删除服务器可能导致将大多数key重新映射到不同的服务器。该方法与Cache::Memcached Perl库兼容。如果指定了consistent参数,则将使用ketama一致性哈希方法,该方法确保在向组中添加或从组中删除服务器时,只有少数键将被重新映射到不同的服务器,这有助于为缓存服务器实现更高的缓存命中率,该方法兼容Cache::Memcached::Fast Perl库,ketama_points参数设置为160。

2.3.47、ngx_http_upstream_ip_hash_module模块

ip_hash

  • 语法: ip_hash;
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 指定组应该使用负载均衡方法,其中请求基于客户端IP地址在服务器之间分布。客户端IPv4地址或整个IPv6地址的前三个字节被用作哈希键,该方法确保来自同一客户端的请求总是被传递到同一台服务器,除非该服务器不可用。在后一种情况下,客户端请求将被传递到另一个服务器。最有可能的是,它将始终是相同的服务器。
    # 如果需要临时删除其中一台服务器,则应使用该down参数进行标记,以保留客户端IP地址的当前散列
    http {
    	upstream backend {
    		ip_hash;
    
    		server backend1.example;
    		server backend2.example;
    		# 使用了down
    		server backend3.example down;
    		server backend4.example;
    	}
    }
    

2.3.48、ngx_http_upstream_keepalive_module模块

keepalive

  • 语法: keepalive connections;
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 激活到上游服务器的连接的缓存。连接参数设置每个工作进程的缓存中保留的与上游服务器的空闲保持连接的最大数量,当超过这个数字时,最近最少使用的连接将被关闭。需要注意的是,该指令不限制Nginx工作进程可以打开的上游服务器的连接总数,该connections参数应设置为一个足够小的数字,以便上游服务器也处理新的传入连接。当使用默认循环方法以外的负载平衡方法时,必须在keepalive指令之前激活它们。
    # 使用keepalive连接的memcached upstream的示例配置:
    http {
    	upstream memcached_backend {
    		server 127.0.0.1:11211;
    		server 10.0.0.2:11211;
    		keepalive 32;
    	}
    
    	server {
    		...
    		
    		location /memcached/ {
    			set $memcached_key $uri;
    			memcached_pass memcached_backend;
    		}
    	}
    }
    
    # 对于HTTP,proxy_http_version指令应设置为"1.1",并清除"Connection"标头字段:
    http {
    	upstream http_backend {
    		server 127.0.0.1:8080;
    		keepalive 16;
    	}
    
    	server {
    		...
    		
    		location /http/ {
    			proxy_pass http://http_backend;
    			proxy_http_version 1.1;
    			proxy_set_header Connection "";
    			...
    		}
    	}
    }
    
    # 对于FastCGI服务器,需要设置fastcgi_keep_conn才能使keepalive连接工作
    http {
    	upstream fastcgi_backend {
    		server 127.0.0.1:9000;
    		keepalive 8;
    	}
    
    	server {
    		...
    		
    		location /fastcgi/ {
    			fastcgi_pass fastcgi_backend;
    			fastcgi_keep_conn on;
    			...
    		}
    	}
    }
    
    # SCGI和uwsgi协议没有保持连接的概念
    

keepalive_timeout

  • 语法: keepalive_timeout time;
  • 默认: keepalive_timeout 60s;
  • 上下文: http块中的upstream块
  • 说明: 设置一个超时时间,在此期间与上游服务器的空闲保持连接将保持打开。

keepalive_requests

  • 语法: keepalive_requests number;
  • 默认: keepalive_requests 1000;
  • 上下文: http块中的upstream块
  • 说明: 设置通过一个保持连接可以服务的最大请求数,在达到最大请求数后,连接关闭。为了释放每个连接分配的内存,需要定期关闭连接,因此,使用过高的最大请求数可能会导致过多的内存使用,不建议这样做。

2.3.49、ngx_http_upstream_least_conn_module模块

least_conn

  • 语法: least_conn;
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 指定组应使用负载均衡方法,将请求传递给活动连接数最少的服务器,并考虑服务器的权重。如果有多个这样的服务器,则使用加权循环平衡方法依次尝试它们。

2.3.50、ngx_http_upstream_random_module模块

random

  • 语法: random [two [method]];
  • 参数说明:
    • two – 表示Nginx随机选择两个服务器,然后使用指定的method选择一个服务器
    • method – 有两种选择:
      1. 默认是least_conn,它将请求传递给活动连接数最少的服务器
      2. least_time将请求传递给具有最少平均响应时间和最少活动连接数的服务器
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 指定组应使用负载均衡方法,将请求传递给随机选择的服务器,并考虑服务器的权重。

2.3.51、ngx_http_upstream_zone_module模块

zone

  • 语法: zone name [size];
  • 默认:
  • 上下文: http块中的upstream块
  • 说明: 定义共享内存区域的name和size,该区域保持工作进程之间共享的组配置和运行时状态,几个组可能共享同一个区域,在这种情况下,只指定一次size就足够了。

2.3.52、ngx_http_userid_filter_module模块

userid

  • 语法: userid on|v1|log|off;
  • 参数说明:
    • on – 表示启用版本2的cookie的设置并记录接收到的cookie
    • v1 – 表示启用版本1的cookie的设置并记录接收到的cookie
    • log – 表示禁用cookie的设置,但允许记录接收到的cookie
    • off – 表示禁止设置cookie和记录接收到的cookie
  • 默认: userid off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用设置cookie并记录接收到的cookie。

userid_service

  • 语法: userid_service number;
  • 默认: userid_service IP address of the server;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果标识由多个服务器(服务)发出,每个服务应该被分配自己的编号,以确保客户端标识是唯一的。对于版本1的cookie,默认值为零。对于版本2的cookie,默认值是由服务器IP地址的后4个字节组成的数字。

userid_name

  • 语法: userid_name name;
  • 默认: userid_name uid;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置cookie的名称。

userid_domain

  • 语法: userid_domain name|none;
  • 默认: userid_domain none;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个设置cookie的字段,参数none表示禁用cookie字段的设置。

userid_path

  • 语法: userid_path path;
  • 默认: userid_path /;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义设置cookie的路径。

userid_expires

  • 语法: userid_expires time|max|off;
  • 参数说明:
    • time – 表示正常设置一个过期时间
    • max – 表示cookie将在"31 Dec 2037 23:55:55 GMT"过期
    • off – 表示cookie将在浏览器会话结束时过期
  • 默认: userid_expires off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置浏览器保存cookie的时间。

userid_p3p

  • 语法: userid_p3p string|none;
  • 默认: userid_p3p none;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将与cookie一起发送的"P3P"报头字段的值,如果该指令被设置为特殊值none的话,"P3P"字段将不会在响应头中发送。

userid_mark

  • 语法: userid_mark letter|digit|=|off;
  • 默认: userid_mark off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果该参数不为off,则启用cookie标记机制,并设置用作标记的字符。此机制用于添加或更改userid_p3p和/或cookie过期时间,同时保留客户端标识符。标记可以是英文字母表中的任何字母(区分大小写)、数字或"="字符。如果设置了该标记,它将与在cookie中传递的客户端标识符的base64表示中的第一个填充符号进行比较,如果它们不匹配,则使用指定的标记、过期时间和"P3P"标头重新发送cookie。

2.3.53、ngx_http_uwsgi_module模块

uwsgi_pass

  • 语法: uwsgi_pass [protocol://]address;
  • 默认:
  • 上下文: http块中的location块、http块中的location块中的if块
  • 说明: 设置uwsgi服务器的协议和地址,协议可以指定"uwsgi"或"suwsgi"(secure uwsgi, uwsgi over SSL),地址可以指定为域名或IP地址,也可以是UNIX域套接字。如果域名解析为多个地址,则所有地址都将以循环方式使用,此外,可以将地址指定为服务器组。参数值可以包含变量。在这种情况下,如果将地址指定为域名,则在描述的服务器组中搜索该名称,如果没有找到,则使用解析器确定。
    http {
    	server {
    		location / {
    			uwsgi_pass localhost:9000;
    			uwsgi_pass uwsgi://localhost:9000;
    			uwsgi_pass suwsgi://[2001:db8::1]:9090;
    			uwsgi_pass unix:/tmp/uwsgi.socket;
    		}
    	}
    }
    

uwsgi_modifier1

  • 语法: uwsgi_modifier1 number;
  • 默认: uwsgi_modifier1 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置uwsgi报文头中modifier1字段的值。

uwsgi_modifier2

  • 语法: uwsgi_modifier2 number;
  • 默认: uwsgi_modifier2 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置uwsgi报文头中modifier2字段的值。

uwsgi_store

  • 语法: uwsgi_store on|off|string;
  • 参数说明:
    • on – 表示将文件保存到alias或root对应的路径
    • off – 表示禁止保存文件
    • string – 表示显式地设置文件名,文件名可以使用变量来代替
  • 默认: uwsgi_store off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁止将文件保存到磁盘。

uwsgi_store_access

  • 语法: uwsgi_store_access users:permissions [users:permissions …];
  • 默认: uwsgi_store_access user:rw;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为新创建的文件和目录设置访问权限。
    http {
    	server {
    		location ~ ^(.+\.php)(.*)$ {
    			...
    			# 正常设置权限
    			uwsgi_store_access user:rw group:rw all:r;
    			# 如果指定了任意group或all访问权限,则user可以省略权限
    			uwsgi_store_access group:rw all:r;
    		}
    	}
    }
    

uwsgi_buffering

  • 语法: uwsgi_buffering on|off;
  • 默认: uwsgi_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用客户端请求正文的缓冲。启用缓冲后,Nginx会尽快收到来自uwsgi服务器的响应,并将其保存到uwsgi_buffer_size和uwsgi_buffers指令设置的缓冲区中。如果整个响应无法装入内存,则可以将其中一部分保存到磁盘上的临时文件中,写入临时文件由uwsgi_max_temp_file_size和uwsgi_temp_file_write_size指令控制。当缓存被禁用时,响应将在接收到时立即同步地传递给客户机。Nginx不会尝试从uwsgi服务器读取整个响应。Nginx每次从服务器接收数据的最大大小是由uwsgi_buffer_size指令设置的。缓冲也可以通过在"X-Accel-Buffering"响应头字段中传递"yes"或"no"来启用或禁用,也可以使用uwsgi_ignore_headers指令禁用此功能。

uwsgi_request_buffering

  • 语法: uwsgi_request_buffering on|off;
  • 默认: uwsgi_request_buffering on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用客户端请求正文的缓冲。启用缓冲后,在将请求发送到uwsgi服务器之前,将从客户端读取整个请求正文。当缓冲被禁用时,请求正文在收到时立即发送到uwsgi服务器。在这种情况下,如果Nginx已经开始发送请求正文,则请求无法传递到下一个服务器。当使用HTTP/1.1分块传输编码发送原始请求正文时,请求正文将被缓冲,而不管该指令的值。

uwsgi_ignore_client_abort

  • 语法: uwsgi_ignore_client_abort on|off;
  • 默认: uwsgi_ignore_client_abort off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定当客户端在不等待响应的情况下关闭连接时,是否应关闭与uwsgi服务器的连接。

uwsgi_bind

  • 语法: uwsgi_bind address [transparent];
        uwsgi_bind off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起与uwsgi服务器的连接
    • off – 表示取消了uwsgi_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 从指定的带有可选端口的本地IP地址向uwsgi服务器发起连接。
    http {
    	uwsgi_bind $remote_addr transparent;
    }
    

uwsgi_socket_keepalive

  • 语法: uwsgi_socket_keepalive on|off;
  • 默认: uwsgi_socket_keepalive off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为发送到uwsgi服务器的连接配置"TCP keepalive"行为。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

uwsgi_connect_timeout

  • 语法: uwsgi_connect_timeout time;
  • 默认: uwsgi_connect_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义与uwsgi服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

uwsgi_send_timeout

  • 语法: uwsgi_send_timeout time;
  • 默认: uwsgi_send_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置将请求传输到uwsgi服务器的超时时间。这里指的是在两次连续写入操作之间间隔,而不是针对整个请求的传输。如果缓存服务器在此时间内没有收到任何消息,则连接关闭。

uwsgi_buffer_size

  • 语法: uwsgi_buffer_size size;
  • 默认: uwsgi_buffer_size 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置用于读取从uwsgi服务器接收的响应的第一部分的缓冲区的大小,这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

uwsgi_pass_request_headers

  • 语法: uwsgi_pass_request_headers on|off;
  • 默认: uwsgi_pass_request_headers on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求的报头字段传递给uwsgi服务器。

uwsgi_pass_request_body

  • 语法: uwsgi_pass_request_body on|off;
  • 默认: uwsgi_pass_request_body on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指示是否将原始请求正文信息传递给uwsgi服务器。

uwsgi_intercept_errors

  • 语法: uwsgi_intercept_errors on|off;
  • 默认: uwsgi_intercept_errors off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定是否应该将响应码大于或等于300的uwsgi服务器响应传递给客户端,或者拦截并重定向到Nginx以使用error_page指令进行处理。

uwsgi_read_timeout

  • 语法: uwsgi_read_timeout time;
  • 默认: uwsgi_read_timeout 60s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义从uwsgi服务器读取响应的超时时间。这里指的是在两次连续读取操作之间间隔,而不是针对整个响应的传输。如果uwsgi服务器在此时间内没有传输任何内容,则连接关闭。

uwsgi_buffers

  • 语法: uwsgi_buffers number size;
  • 默认: uwsgi_buffers 8 4k|8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为单个连接设置用于从uwsgi服务器读取响应的缓冲区的数量和大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

uwsgi_busy_buffers_size

  • 语法: uwsgi_busy_buffers_size size;
  • 默认: uwsgi_busy_buffers_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用了对来自uwsgi服务器的响应的缓存时,该指令可以限制缓冲区的总大小,可以是正忙于发送到客户端的响应,而响应还没有完全读取。同时,其余的缓冲区可用于读取响应,如果需要,还可以缓冲对临时文件的部分响应。默认情况下,大小受uwsgi_buffer_size和uwsgi_buffers两个缓冲区大小的限制。

uwsgi_force_ranges

  • 语法: uwsgi_force_ranges on|off;
  • 默认: uwsgi_force_ranges off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 无论这些响应中的"Accept-Ranges"字段如何,都为来自uwsgi服务器的缓存和未缓存响应启用字节范围支持。

uwsgi_limit_rate

  • 语法: uwsgi_limit_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: uwsgi_limit_rate 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制从uwsgi服务器读取响应的速度。该限制是针对每个请求设置的,因此如果Nginx同时打开两个到uwsgi服务器的连接,则总体速率将是指定限制的两倍。仅当启用了uwsgi服务器的响应缓冲时,此限制才有效。

uwsgi_cache

  • 语法: uwsgi_cache zone|off;
  • 参数说明:
    • zone – 可以包含变量,表示缓存的区域
    • off – 表示禁用从先前配置级别继承缓存信息
  • 默认: uwsgi_cache off
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义用于缓存的共享内存区域,同一个区域可以在多个地方使用。

uwsgi_cache_key

  • 语法: uwsgi_cache_key string;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个用于缓存的键。

uwsgi_cache_path

  • 语法: uwsgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
  • 默认:
  • 上下文: http块
  • 说明: 设置缓存的路径和其他参数,缓存数据存储在文件中,缓存中的文件名是对缓存键使用MD5函数生成的结果。

uwsgi_cache_bypass

  • 语法: uwsgi_cache_bypass string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不从缓存中获取响应的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会从缓存中获取响应。
    http {
    	uwsgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
    	uwsgi_cache_bypass $http_pragma    $http_authorization;
    }
    

uwsgi_no_cache

  • 语法: uwsgi_no_cache string [string …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义不将响应保存到缓存的条件,如果字符串参数中至少有一个值不为空且不等于"0",则不会保存响应。
    http {
    	uwsgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
    	uwsgi_no_cache $http_pragma    $http_authorization;
    }
    

uwsgi_cache_valid

  • 语法: uwsgi_cache_valid [code …] time;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为不同的响应码设置缓存时间。
    http {
    	# 为响应码200和302的响应信息设置10分钟的缓存
    	uwsgi_cache_valid 200 302 10m;
    	# 为响应码404的响应信息设置1分钟的缓存
    	uwsgi_cache_valid 404 1m;
    	
    	# 如果没有指定响应码,则只有200、301和302响应被缓存。
    	uwsgi_cache_valid 5m;
    	
    	# 可以指定any参数来表示缓存任何响应
    	uwsgi_cache_valid any 1m;
    }
    

uwsgi_cache_min_uses

  • 语法: uwsgi_cache_min_uses number;
  • 默认: uwsgi_cache_min_uses 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置一个请求数,当超过该请求数之后将缓存响应。

uwsgi_cache_max_range_offset

  • 语法: uwsgi_cache_max_range_offset number;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置字节范围请求的字节偏移量,如果范围超出了偏移量,范围请求将被传递到uwsgi服务器,而响应将不会被缓存。

uwsgi_cache_use_stale

  • 语法: uwsgi_cache_use_stale error|timeout|invalid_header|updating|http_500|http_503|http_403|http_404|http_429|off …;
  • 默认: uwsgi_cache_use_stale off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在何种情况下可以在与uwsgi服务器通信时使用过时的缓存响应,该指令的形参与uwsgi_next_upstream指令的形参匹配。此外,如果当前正在更新缓存响应,则更新参数允许使用过时的响应,这允许在更新缓存数据时最小化对uwsgi服务器的访问数量。也可以在响应失效后在响应头中直接启用过期缓存响应,这比使用指令参数具有更低的优先级。"Cache-Control"报头字段的"stale-while-revalidate"扩展允许在当前正在更新的情况下使用陈旧的缓存响应,"Cache-Control"报头字段的"stale-if-error"扩展允许在出现错误时使用陈旧的缓存响应。当填充一个新的缓存元素时,为了最小化对uwsgi服务器的访问次数,可以使用uwsgi_cache_lock指令。

uwsgi_cache_methods

  • 语法: uwsgi_cache_methods GET|HEAD|POST [GET|HEAD|POST …];
  • 默认: uwsgi_cache_methods GET HEAD;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果此指令中列出了客户端请求方法,则响应将被缓存。GET和HEAD方法始终添加到列表中,但建议明确指定它们。

uwsgi_cache_lock

  • 语法: uwsgi_cache_lock on|off;
  • 默认: uwsgi_cache_lock off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当启用时,一次只允许一个请求填充一个新的缓存元素,根据uwsgi_cache_key指令,通过传递一个请求到uwsgi服务器。对同一个缓存元素的其它请求要么等待响应出现在缓存中,要么等待释放这个元素的缓存锁,直到uwsgi_cache_lock_timeout指令设置的时间到达。

uwsgi_cache_lock_timeout

  • 语法: uwsgi_cache_lock_timeout time;
  • 默认: uwsgi_cache_lock_timeout 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为uwsgi_cache_lock设置超时,当time过期时,请求将被传递到uwsgi服务器,但是响应将不会被缓存。

uwsgi_cache_lock_age

  • 语法: uwsgi_cache_lock_age time;
  • 默认: uwsgi_cache_lock_age 5s;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 如果上次传递给uwsgi服务器用于填充新缓存元素的请求在指定的时间内没有完成,那么可能会再传递一个请求给uwsgi服务器。

uwsgi_cache_revalidate

  • 语法: uwsgi_cache_revalidate on|off;
  • 默认: uwsgi_cache_revalidate off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许使用带有"If-Modified-Since"和"If-None-Match"头字段的条件请求重新验证过期的缓存项。

uwsgi_cache_background_update

  • 语法: uwsgi_cache_background_update on|off;
  • 默认: uwsgi_cache_background_update off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许启动后台子请求来更新过期的缓存项,同时将过期的缓存响应返回给客户端。注意,有必要允许在更新时使用陈旧的缓存响应。

uwsgi_temp_path

  • 语法: uwsgi_temp_path path [level1 [level2 [level3]]];
  • 默认: uwsgi_temp_path uwsgi_temp;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义一个目录用于存储从uwsgi服务器接收到的数据的临时文件,最多可在指定目录下使用三层子目录层次结构。
    # 对于以下配置,临时文件可能为:/usr/local/nginx/uwsgi_temp/7/45/00000123457
    http {
    	uwsgi_temp_path /usr/local/nginx/uwsgi_temp 1 2;
    }
    

uwsgi_max_temp_file_size

  • 语法: uwsgi_max_temp_file_size size;
  • 参数说明:
    • size – 为0时表示禁止使用临时文件来缓冲响应信息
  • 默认: uwsgi_max_temp_file_size 1024m;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当缓存来自uwsgi服务器的响应是启用的,并且整个响应不适合uwsgi_buffer_size和uwsgi_buffers指令设置的缓冲区,响应的一部分可以保存到一个临时文件。这个指令设置的就是这个临时文件的最大大小。每次写入临时文件的数据大小由uwsgi_temp_file_write_size指令设置。

uwsgi_temp_file_write_size

  • 语法: uwsgi_temp_file_write_size size;
  • 默认: uwsgi_temp_file_write_size 8k|16k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 当uwsgi服务器的响应缓存到临时文件时,限制一次写入到临时文件的数据的大小。默认情况下,大小受uwsgi_buffer_size和uwsgi_buffers指令设置的两个缓冲区的限制。临时文件的最大大小是由uwsgi_max_temp_file_size指令设置的。

uwsgi_next_upstream

  • 语法: uwsgi_next_upstream error|timeout|invalid_header|http_500|http_503|http_403|http_404|http_429|non_idempotent|off …;
  • 参数说明:
    • error – 表示与服务器建立连接、向其传递请求或读取响应头时发生错误
    • timeout – 表示与服务器建立连接、向其传递请求或读取响应标头时发生超时
    • invalid_header – 表示服务器返回空或无效的响应
    • http_500 – 表示服务器返回响应码为500的响应
    • http_503 – 表示服务器返回响应码为503的响应
    • http_403 – 表示服务器返回响应码为403的响应
    • http_404 – 表示服务器返回响应码为404的响应
    • http_429 – 表示服务器返回响应码为429的响应
    • non_idempotent – 通常,如果请求已发送到上游服务器,则使用“非幂等”方法(POST, LOCK, PATCH)的请求不会传递到下一个服务器,显式启用该参数允许重试此类请求
    • off – 表示禁止将请求传递到下一个服务器
  • 默认: uwsgi_next_upstream error timeout;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定在何种情况下应将请求传递给下一个服务器。

uwsgi_next_upstream_tries

  • 语法: uwsgi_next_upstream_tries number;
  • 默认: uwsgi_next_upstream_tries 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

uwsgi_next_upstream_timeout

  • 语法: uwsgi_next_upstream_timeout time;
  • 默认: uwsgi_next_upstream_timeout 0;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

uwsgi_param

  • 语法: uwsgi_param parameter value [if_not_empty];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置应该传递给uwsgi服务器的参数,该值可以包含文本、变量或者它们的组合,当且仅当当前级别没有定义uwsgi_param指令时,这些指令从上一个配置级别继承。

uwsgi_string

  • 语法: uwsgi_string string;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为一个uwsgi请求增加一个字符串。

uwsgi_pass_header

  • 语法: uwsgi_pass_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许从uwsgi服务器向客户端传递禁用的报头字段。

uwsgi_hide_header

  • 语法: uwsgi_hide_header field;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 默认情况下,Nginx不从uwsgi服务器传递拥有头字段"Status"和"X-Accel-…"的响应到客户端。uwsgi_hide_header指令设置了其他不会被传递的字段。相反,如果需要允许字段的传递,则可以使用uwsgi_pass_header指令。

uwsgi_ignore_headers

  • 语法: uwsgi_ignore_headers field [field …];
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 禁止处理SCGI服务器的某些响应报头字段,以下字段可以忽略:“X-Accel-Expires”、“X-Accel-Redirect”、“X-Accel-Limit-Rate”、“X-Accel-Buffering”、“X-Accel-Charset”、“Expires”、“Cache-Control”、“Set-Cookie"和"Vary”。如果未禁用,则处理这些报头字段具有以下效果:
    1. “X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”、"Vary"设置响应缓存的参数;
    2. "X-Accel-Redirect"执行到指定URI的内部重定向;
    3. "X-Accel-Limit-Rate"设置传输响应给客户端的速率限制;
    4. "X-Accel-Buffering"启用或禁用响应缓冲;
    5. "X-Accel-Charset"设置响应所需字符集。

uwsgi_ssl_session_reuse

  • 语法: uwsgi_ssl_session_reuse on|off;
  • 默认: uwsgi_ssl_session_reuse on;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 确定在使用uwsgi服务器时SSL会话是否可以重用。如果日志中出现错误"SSL3_GET_FINISHED:digest check failed",请尝试禁用会话重用。

uwsgi_ssl_protocols

  • 语法: uwsgi_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: uwsgi_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 为安全的uwsgi服务器的请求启用指定的协议。

uwsgi_ssl_ciphers

  • 语法: uwsgi_ssl_ciphers ciphers;
  • 默认: uwsgi_ssl_ciphers DEFAULT;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定向安全的uwsgi服务器请求时的启用密码,密码以OpenSSL库能够理解的格式指定。可以使用"openssl ciphers"命令查看完整列表。

uwsgi_ssl_name

  • 语法: uwsgi_ssl_name name;
  • 默认: uwsgi_ssl_name host from uwsgi_pass;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许覆盖用于验证安全的uwsgi服务器的证书的服务器名,并在与安全的uwsgi服务器建立连接时通过SNI传递。默认情况下,使用uwsgi_pass的主机部分。

uwsgi_ssl_server_name

  • 语法: uwsgi_ssl_server_name on|off;
  • 默认: uwsgi_ssl_server_name off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 在与安全的uwsgi服务器建立连接时,启用或禁用通过TLS服务器名指示扩展(SNI, RFC 6066)传递服务器名称。

uwsgi_ssl_verify

  • 语法: uwsgi_ssl_verify on|off;
  • 默认: uwsgi_ssl_verify off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 启用或禁用对安全的uwsgi服务器证书的验证。

uwsgi_ssl_verify_depth

  • 语法: uwsgi_ssl_verify_depth number;
  • 默认: uwsgi_ssl_verify_depth 1;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置安全的uwsgi服务器证书链中的验证深度。

uwsgi_ssl_trusted_certificate

  • 语法: uwsgi_ssl_trusted_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证安全的uwsgi服务器的证书。

uwsgi_ssl_crl

  • 语法: uwsgi_ssl_crl file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证安全的uwsgi服务器的证书。

uwsgi_ssl_certificate

  • 语法: uwsgi_ssl_certificate file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的证书用于验证安全的uwsgi服务器的证书。

uwsgi_ssl_certificate_key

  • 语法: uwsgi_ssl_certificate_key file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个PEM格式的带密钥的证书用于验证安全的uwsgi服务器的证书。可以指定值engine:name:id代替文件,它从OpenSSL engine name中加载具有指定id的密钥。

uwsgi_ssl_password_file

  • 语法: uwsgi_ssl_password_file file;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

2.3.54、ngx_http_v2_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_v2_module

http2_recv_buffer_size

  • 语法: http2_recv_buffer_size size;
  • 默认: http2_recv_buffer_size 256k;
  • 上下文: http块
  • 说明: 设置每个工作进程输入缓冲区的大小。

http2_pool_size

  • 语法: http2_pool_size file;
  • 默认: http2_pool_size 4096;
  • 上下文: http块、http块中的server块
  • 说明: 设置线程池大小。

http2_max_concurrent_streams

  • 语法: http2_max_concurrent_streams number;
  • 默认: http2_max_concurrent_streams 128;
  • 上下文: http块、http块中的server块
  • 说明: 设置连接中并发HTTP/2流的最大数目。

http2_max_concurrent_pushes

  • 语法: http2_max_concurrent_pushes number;
  • 默认: http2_max_concurrent_pushes 10;
  • 上下文: http块、http块中的server块
  • 说明: 限制连接中并发推送请求的最大数量。

http2_max_requests

  • 语法: http2_max_requests number;
  • 默认: http2_max_requests 1000;
  • 上下文: http块、http块中的server块
  • 说明: 设置通过一个HTTP/2连接可以服务的最大请求数(包括推送请求),在此之后,下一个客户端请求将导致连接关闭,并需要建立一个新的连接。为了释放每个连接分配的内存,需要定期关闭连接。因此,使用过高的最大请求数可能会导致过多的内存使用,不建议这样做。

http2_max_field_size

  • 语法: http2_max_field_size size;
  • 默认: http2_max_field_size 4k;
  • 上下文: http块、http块中的server块
  • 说明: 限制HPACK压缩的请求标头字段的最大大小,该限制同样适用于名称和值。需要注意的是,如果应用Huffman编码,则解压缩的名称和值字符串的实际大小可能会更大。对于大多数请求,默认限制应该足够了。

http2_max_header_size

  • 语法: http2_max_header_size size;
  • 默认: http2_max_header_size 16k;
  • 上下文: http块、http块中的server块
  • 说明: 限制HPACK解压后整个请求头列表的最大大小 。对于大多数请求,默认限制应该足够了。

http2_body_preread_size

  • 语法: http2_body_preread_size size;
  • 默认: http2_body_preread_size 64k;
  • 上下文: http块、http块中的server块
  • 说明: 设置每个请求的缓冲区大小,在开始处理请求之前,请求正文可能保存在其中。

http2_streams_index_size

  • 语法: http2_streams_index_size size;
  • 默认: http2_streams_index_size 31;
  • 上下文: http块、http块中的server块
  • 说明: 把所有的stream放到一个简易的hash数组中,hash数组的大小为size+1,冲突处理的方法为链地址法。

http2_recv_timeout

  • 语法: http2_recv_timeout time;
  • 默认: http2_recv_timeout 30s;
  • 上下文: http块、http块中的server块
  • 说明: 设置等待来自客户端的更多数据的超时时间,之后连接关闭。

http2_idle_timeout

  • 语法: http2_idle_timeout time;
  • 默认: http2_idle_timeout 3m;
  • 上下文: http块、http块中的server块
  • 说明: 设置不活动的超时时间,之后连接关闭。

http2_chunk_size

  • 语法: http2_chunk_size size;
  • 默认: http2_chunk_size 8k;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 设置响应正文切片的块的最大大小。值过低会导致更高的开销,由于HOL阻塞,过高的值会损害优先级。

http2_push_preload

  • 语法: http2_push_preload on|off;
  • 默认: http2_push_preload off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许自动将"Link"响应头字段中指定的预加载链接转换为推送请求。

http2_push

  • 语法: http2_push uri|off;
  • 默认: http2_push off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 预先向指定对象发送(推送)请求uri以及对原始请求的响应,只会处理具有绝对路径的相对uri,例如:http2_push /static/css/main.css; 该uri值可以包含变量,http2_push可以在同一配置级别上指定多个指令,参数off取消了http2_push从先前配置级别继承的指令的效果。

2.3.55、ngx_http_xslt_filter_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-http_xslt_filter_module
该模块需要libxml2库和libxslt库的支持

xml_entities

  • 语法: xml_entities path;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 指定声明字符实体的DTD文件,该文件在配置阶段编译。由于技术原因,模块无法使用在处理过的XML中声明的外部子集,因此它被忽略并使用专门定义的文件代替。该文件不应描述XML结构,仅声明所需的字符实体就足够了,例如:<!ENTITY nbsp " ">。

xslt_stylesheet

  • 语法: xslt_stylesheet stylesheet [parameter=value …];
  • 默认:
  • 上下文: http块中的location块
  • 说明: 定义XSLT样式表及其可选参数,在配置阶段编译样式表。参数可以单独指定,也可以使用":“分隔符组合在一行中,如果参数包”:“字符,则应将其转义为”%3A"。此外,libxslt需要将包含非字母数字字符的参数括在单引号或双引号中,例如:param1=‘http%3A//www.example’:param2=value2。也可以指定多个样式表,它们将按指定的顺序依次应用。
    # 数描述可以包含变量,例如整行参数可以取自一个变量
    http {
    	server {
    		location / {
    			xslt_stylesheet /site/xslt/one.xslt
    							$arg_xslt_params
    							param1='$value1':param2=value2
    							param3=value3;
    		}
    	}
    }
    

xslt_param

  • 语法: xslt_param parameter value;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义XSLT样式表的参数,参数value被视为一个XPath表达式,value可以包含变量。要将字符串值传递给样式表,可以使用xslt_string_param指令。可以有多个xslt_param指令,当且仅当当前级别上没有定义xslt_param和xslt_string_param指令时,这些指令才从先前的配置级别继承。

xslt_string_param

  • 语法: xslt_string_param parameter value;
  • 默认:
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 定义XSLT样式表的字符串参数,参数value中的XPath表达式不被解释,value可以包含变量。可以有多个xslt_string_param指令,当且仅当当前级别上没有定义xslt_param和xslt_string_param指令时,这些指令将从前一个配置级别继承。

xslt_types

  • 语法: xslt_types mime-type [mime-type …];
  • 默认: xslt_types text/xml;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 除了"text/html"之外,还支持在响应中使用指定的MIME类型进行转换,特殊值"*“匹配任何MIME类型。如果转换结果是HTML响应,则其MIME类型被更改为"text/html”。

xslt_last_modified

  • 语法: xslt_last_modified on|off;
  • 默认: xslt_last_modified off;
  • 上下文: http块、http块中的server块、http块中的location块
  • 说明: 允许在XSLT转换期间保留来自原始响应的"Last-Modified"报头字段,以方便响应缓存。默认情况下,当响应的内容在转换期间被修改时,报头字段会被删除,并且可能包含独立于原始响应而动态生成的元素或部分。

2.4、位于mail块的配置指令

要使用mail模块相关内容需要在构建Nginx时加上配置选项: –with-mail

2.4.1、ngx_mail_auth_http_module模块

auth_http

  • 语法: auth_http URL;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 设置HTTP认证服务器的URL。

auth_http_timeout

  • 语法: auth_http_timeout time;
  • 默认: auth_http_timeout 60s;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置与身份验证服务器通信的超时时间。

auth_http_header

  • 语法: auth_http_header header value;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 将指定的标头附加到发送到身份验证服务器的请求中,此标头可用作共享密钥以验证请求是否来自Nginx。
    mail {
    	auth_http_header X-Auth-Key "secret_string";
    }
    

auth_http_pass_client_cert

  • 语法: auth_http_pass_client_cert on|off;
  • 默认: auth_http_pass_client_cert off;
  • 上下文: mail块、mail块中的server块
  • 说明: 将带有PEM格式的客户端证书的"Auth-SSL-Cert"标头附加到发送到身份验证服务器的请求中。

2.4.2、ngx_mail_core_module模块

server

  • 语法: server {…};
  • 默认: auth_http_pass_client_cert off;
  • 上下文: mail块
  • 说明: 设置一个属于mail块的server块。

listen

  • 语法: listen address:port [ssl] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  • 默认:
  • 上下文: mail块中的server块
  • 说明: 设置mail的监听地址。对于IP协议,这个地址就是address和port,可以只指定端口,地址也可以是主机名。对于UNIX域套接字协议,这个地址就是path。
    mail {
    	server {
    		# IPv4
    		listen 127.0.0.1:110;
    		listen *:110;
    		listen 110;     # same as *:110
    		listen localhost:110;
    		
    		# IPv6
    		listen [::1]:110;
    		listen [::]:110;
    		
    		# UNIX
    		listen unix:/var/run/nginx.sock;
    	}
    }
    

protocol

  • 语法: protocol imap|pop3|smtp;

  • 默认:

  • 上下文: mail块中的server块

  • 说明: 设置代理服务器的协议,支持的协议有IMAP、POP3和SMTP。如果未设置该指令,则可以根据listen指令中指定的已知端口自动检测协议:

    1. imap: 143, 993
    2. pop3: 110, 995
    3. smtp: 25, 587, 465

    不需要的协议可以使用配置参数–without-mail_imap_module、–without-mail_pop3_module以及–without-mail_smtp_module来禁止使用它们。


timeout

  • 语法: timeout time;
  • 默认: timeout 60s;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置代理到后端启动之前使用的超时时间。

server_name

  • 语法: server_name name;
  • 默认: server_name hostname;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置使用的服务器名称,如果没有指定该指令,则使用机器的主机名。

error_log

  • 语法: error_log file [level];
  • 参数说明:
    • file – 表示存储日志的文件,特殊值stderr表示选择标准错误文件,可以通过指定"syslog:"前缀来配置日志到syslog,可以通过指定"memory:"前缀和缓冲区大小来配置到循环内存缓冲区的日志记录
    • level – 表示日志记录的级别,可以是以下级别之一:debug、info、notice、warn、error、crit、alert或emerg。以上的日志级别是按严重性递增的顺序列出的,设置某个日志级别将导致记录指定的和更严重的日志级别的所有消息,如果省略此参数,则默认使用error级别记录日志
  • 默认: error_log logs/error.log error;
  • 上下文: mail块、mail块中的server块
  • 说明: 配置日志记录,可以在同一配置级别上指定多个日志,如果在全局配置级别上未明确定义将日志写入文件,则将使用默认文件。如果要打印DEBUG级别的日志,需在构建Nginx时加上配置选项: –with-debug

resolver

  • 语法: resolver address [address …] [valid=time] [ipv6=on|off] [status_zone=zone];
  • 参数说明:
    • address – 表示指定的域名或IP地址,如果未指定端口,则默认使用53端口
    • valid – 表示允许缓存的时间,默认情况下,Nginx使用响应的TTL值来作为缓存应答的时间
    • ipv6 – 表示是否查找IPv6地址,默认解析时会同时查找IPv4和IPv6地址,可以显示地使用"ipv6=off"来取消查找IPv6地址
    • status_zone – 表示收集指定区域内请求和响应的DNS服务器统计信息
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 配置名称服务器,用于查找客户机的主机名,以便将其传递给身份验证服务器,并在代理SMTP时使用XCLIENT命令。
    http {
    	resolver 127.0.0.1 [::1]:5353;
    	resolver 127.0.0.1 [::1]:5353 valid=30s;
    }
    

resolver_timeout

  • 语法: resolver_timeout time;
  • 默认: resolver_timeout 30s;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置DNS操作的超时时间。

2.4.3、ngx_mail_imap_module模块

imap_client_buffer

  • 语法: imap_client_buffer size;
  • 默认: imap_client_buffer 4k|8k;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置用于读取IMAP命令的缓冲区大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

imap_capabilities

  • 语法: imap_capabilities extension [extension …];
  • 默认: imap_capabilities IMAP4 IMAP4rev1 UIDPLUS;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置响应CAPABILITY命令传递给客户端的IMAP协议扩展列表,imap_auth指令和STARTTLS中指定的身份验证方法会根据STARTTLS指令的值自动添加到这个列表中。

imap_auth

  • 语法: imap_auth method [method …];

  • 默认: imap_auth plain;

  • 上下文: mail块、mail块中的server块

  • 说明: 为IMAP客户端设置允许的身份验证方法,支持的方法有:

    1. plain:LOGIN,AUTH=PLAIN
    2. login:AUTH=LOGIN
    3. cram-md5:AUTH=CRAM-MD5,为了使此方法起作用,密码必须以未加密方式存储
    4. external:AUTH=EXTERNAL

    纯文本身份验证方法(LOGIN命令,AUTH=Plain和AUTH=LOGIN)总是启用,但是如果没有指定纯文本和登录方法,AUTH= Plain和AUTH=LOGIN将不会自动包含在imap_capabilities中。

2.4.4、ngx_mail_pop3_module模块

pop3_capabilities

  • 语法: pop3_capabilities extension [extension …];
  • 默认: pop3_capabilities TOP USER UIDL;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置响应CAPA命令传递给客户端的POP3协议扩展列表,pop3_auth指令(SASL扩展)和STLS中指定的身份验证方法会根据starttls指令的值自动添加到这个列表中。

pop3_auth

  • 语法: pop3_auth method [method …];

  • 默认: pop3_auth plain;

  • 上下文: mail块、mail块中的server块

  • 说明: 为POP3客户端设置允许的身份验证方法,支持的方法有:

    1. plain:USER/PASS,AUTH PLAIN,AUTH LOGIN
    2. apop:APOP,为了使此方法起作用,密码必须以未加密方式存储
    3. cram-md5:AUTH CRAM-MD5,为了使此方法起作用,密码必须以未加密方式存储
    4. external:AUTH EXTERNAL

    纯文本身份验证方法(USER/PASS,AUTH Plain,和AUTH LOGIN)总是启用,但是如果没有指定纯文本方法,AUTH Plain和AUTH LOGIN将不会自动包含在pop3_capabilities中。

2.4.5、ngx_mail_proxy_module模块

proxy

  • 语法: proxy on|off;
  • 默认: proxy off;
  • 上下文: mail块、mail块中的server块
  • 说明: 启用或禁用代理MAIL服务器。

proxy_buffer

  • 语法: proxy_buffer size;
  • 默认: proxy_buffer 4k|8k;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置用于代理的缓冲区的大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

proxy_timeout

  • 语法: proxy_timeout time;
  • 默认: proxy_timeout 24h;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置客户机或代理服务器连续的两个读或写操作之间的超时时间。如果在此时间内没有传输数据,连接将关闭。

proxy_pass_error_message

  • 语法: proxy_pass_error_message on|off;
  • 默认: proxy_pass_error_message off;
  • 上下文: mail块、mail块中的server块
  • 说明: 是否将后端认证时获取的错误消息传递给客户端。通常,如果Nginx中的身份验证是成功的,后端就不能返回一个错误,如果它仍然返回一个错误,则意味着发生了一些内部错误,在这种情况下,后端消息可能包含不应该显示给客户机的信息。但是,对于某些POP3服务器来说,使用正确密码的错误进行响应是一种正常行为。例如,CommuniGatePro通过定期输出身份验证错误来通知用户邮箱溢出或其他事件。在这种情况下,应该启用该指令。

xclient

  • 语法: xclient on|off;
  • 默认: xclient on;
  • 上下文: mail块、mail块中的server块
  • 说明: 启用或禁用在连接到SMTP后端时传递带有客户端参数的XCLIENT命令。使用XCLIENT,MTA能够将客户端信息写入日志并基于此数据应用各种限制。

2.4.6、ngx_mail_smtp_module模块

smtp_client_buffer

  • 语法: smtp_client_buffer size;
  • 默认: smtp_client_buffer 4k|8k;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置用于读取SMTP命令的缓冲区的大小。默认情况下,缓冲区大小等于一页内存,有可能是4K或8K,具体取决于平台。

smtp_greeting_delay

  • 语法: smtp_greeting_delay time;
  • 默认: smtp_greeting_delay 0;
  • 上下文: mail块、mail块中的server块
  • 说明: 允许在发送SMTP问候语之前设置延迟,以拒绝在发送SMTP命令之前未能等待问候语的客户端。

smtp_capabilities

  • 语法: smtp_capabilities extension [extension …];
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 设置响应EHLO命令传递给客户端的SMTP协议扩展列表,smtp_auth指令和STARTTLS中指定的身份验证方法会根据STARTTLS指令的值自动添加到这个列表中。

smtp_auth

  • 语法: smtp_auth method [method …];

  • 默认: smtp_auth plain login;

  • 上下文: mail块、mail块中的server块

  • 说明: 为SMTP客户端设置允许的SASL身份验证方法,支持的方法有:

    1. plain:AUTH PLAIN
    2. login:AUTH LOGIN
    3. cram-md5:AUTH CRAM-MD5,为了使此方法起作用,密码必须以未加密方式存储
    4. external:AUTH EXTERNAL
    5. none:不需要身份验证

    纯文本身份验证方法(AUTH Plain和AUTH LOGIN)始终是启用的,但是如果没有指定纯文本和登录方法,AUTH Plain和AUTH LOGIN将不会自动包含在smtp_capabilities中。

2.4.7、ngx_mail_ssl_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-mail_ssl_module

ssl

  • 语法: ssl on|off;
  • 默认: ssl off;
  • 上下文: mail块、mail块中的server块
  • 说明: 该指令在1.15.0后的版本中已过时,应该使用listen指令的ssl参数来代替。

starttls

  • 语法: starttls on|off|only;
  • 参数说明:
    • on – 表示允许对POP3使用STLS命令,对IMAP和SMTP使用STARTTLS命令
    • off – 表示拒绝使用STLS和STARTTLS命令
    • only – 表示需要初始TLS转换
  • 默认: starttls off;
  • 上下文: mail块、mail块中的server块
  • 说明: 明文通信协议的扩展。

ssl_certificate

  • 语法: ssl_certificate file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 为给定的服务器指定PEM格式的证书文件。如果除主证书外还应指定中间证书,则应按以下顺序在同一文件中指定它们:首先是主证书,然后是中间证书。PEM格式的密钥可以放在同一个文件中。可以在参数file中使用变量。

ssl_certificate_key

  • 语法: ssl_certificate_key file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 为给定的服务器指定PEM格式的密钥文件。可以指定值engine:name:id,而不是file,它从OpenSSL engine name中加载具有指定id的密钥。可以指定值data:$variable而不是file,该文件不使用中间文件从变量加载密钥,需要注意的是,这种语法的不适当使用可能会带来安全隐患,比如将密钥数据写入错误日志。可以在参数file中使用变量。

ssl_password_file

  • 语法: ssl_password_file file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

ssl_dhparam

  • 语法: ssl_dhparam file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 为DHE密码指定一个带有DH参数的文件,默认情况下,没有设置任何参数,因此不会使用DHE密码。

ssl_ecdh_curve

  • 语法: ssl_ecdh_curve curve;
  • 默认: ssl_ecdh_curve auto;
  • 上下文: mail块、mail块中的server块
  • 说明: 指定ECDHE密码的curve。特殊值auto指示Nginx在使用OpenSSL 1.0.2或更高版本时,或使用旧版本的prime256v1时,使用OpenSSL库中的内置列表。

ssl_protocols

  • 语法: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: mail块、mail块中的server块
  • 说明: 启用指定的协议。

ssl_ciphers

  • 语法: ssl_ciphers ciphers;
  • 默认: ssl_ciphers HIGH:!aNULL:!MD5;
  • 上下文: mail块、mail块中的server块
  • 说明: 指定启用的密码。密码以OpenSSL库理解的格式指定,可以使用"openssl ciphers"命令查看完整列表。
    mail {
    	ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    }
    

ssl_prefer_server_ciphers

  • 语法: ssl_prefer_server_ciphers on|off;
  • 默认: ssl_prefer_server_ciphers off;
  • 上下文: mail块、mail块中的server块
  • 说明: 指定使用SSLv3和TLS协议时,服务器密码应该优先于客户端密码。

ssl_session_cache

  • 语法: ssl_session_cache off|none|[builtin[:size]] [shared:name:size];
  • 参数说明:
    • off – 表示严格禁止使用会话缓存,Nginx明确告诉客户端会话不能被重用
    • none – 表示不允许使用会话缓存,Nginx告诉客户端可以重用会话,但实际上并不在缓存中存储会话参数
    • builtin – 表示一个内置于OpenSSL的缓存,仅由一个工作进程使用,缓存大小在会话中指定,如果未给出大小,则等于20480个会话,使用内置缓存可能会导致内存碎片
    • shared – 表示在所有工作进程之间共享的缓存,缓存大小以字节为单位,1M字节可以存储大约4000个会话,每个共享缓存应该有一个任意名称,同名缓存可用于多个虚拟服务器
  • 默认: ssl_session_cache none;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置存储会话参数的缓存的类型和大小。

ssl_session_tickets

  • 语法: ssl_session_tickets on|off;
  • 默认: ssl_session_tickets on;
  • 上下文: mail块、mail块中的server块
  • 说明: 启用或禁用通过TLS会话票证恢复会话。

ssl_session_ticket_key

  • 语法: ssl_session_ticket_key file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 设置具有用于加密和解密TLS会话票据的秘钥的文件,如果多个服务器之间必须共享相同的密钥,那么该指令是必要的,缺省情况下,使用随机生成的密钥。
    mail {
    	# 如果指定了几个密钥,则只使用第一个密钥加密TLS会话票证,这允许配置密钥轮换,例如:
    	ssl_session_ticket_key current.key;
    	ssl_session_ticket_key previous.key;
    	
    	# file必须包含80或48字节的随机数据,可以使用以下命令创建:
    	openssl rand 80 > ticket.key
    	
    	# 根据文件大小,使用AES256(对于80字节密钥)或AES128(对于48字节密钥)进行加密
    }
    

ssl_session_timeout

  • 语法: ssl_session_timeout time;
  • 默认: ssl_session_timeout 5m;
  • 上下文: mail块、mail块中的server块
  • 说明: 指定客户端可以重用会话参数的时间。

ssl_verify_client

  • 语法: ssl_verify_client on|off|optional|optional_no_ca;
  • 默认: ssl_verify_client off;
  • 上下文: mail块、mail块中的server块
  • 说明: 允许验证客户端的证书,验证结果在认证请求的"Auth-SSL-Verify"头中传递。参数optional表示请求客户端证书,并验证证书是否存在。参数optional_no_ca表示请求客户端证书,但不要求它由受信任的CA证书签名。这适用于Nginx外部的服务执行实际证书验证的情况。证书的内容可以通过发送给身份验证服务器的请求进行访问。

ssl_verify_depth

  • 语法: ssl_verify_depth number;
  • 默认: ssl_verify_depth 1;
  • 上下文: mail块、mail块中的server块
  • 说明: 设置客户端证书链中的验证深度。

ssl_client_certificate

  • 语法: ssl_client_certificate file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证客户端的证书。证书列表将发送给客户端,如果不希望这样,可以使用ssl_trusted_certificate指令。

ssl_trusted_certificate

  • 语法: ssl_trusted_certificate file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证客户端的证书。

ssl_crl

  • 语法: ssl_crl file;
  • 默认:
  • 上下文: mail块、mail块中的server块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证客户端的证书。

2.5、位于stream块的配置指令

要使用stream模块相关内容需要在构建Nginx时加上配置选项: –with-stream

2.5.1、ngx_stream_access_module模块

allow

  • 语法: allow address|CIDR|unix:|all;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 表示描述的网络地址有权直接访问。如果指定unix:,则允许所有UNIX域套接字的访问。注意:allow和deny的规则是按顺序执行的。

deny

  • 语法: deny address|CIDR|unix:|all;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 表示描述的网络地址将被拒绝访问。如果指定unix:,则将拒绝所有UNIX域套接字的访问。注意:allow和deny的规则是按顺序执行的。
    # 在下面的例子中,仅允许网段 10.1.1.0/16 和 192.168.1.0/24 中除 192.168.1.1 之外的ip访问
    http {
    	deny    192.168.1.1;
    	allow   192.168.1.0/24;
    	allow   10.1.1.0/16;
    	deny    all;
    }
    

2.5.2、ngx_stream_core_module模块

variables_hash_max_size

  • 语法: variables_hash_max_size size;
  • 默认: variables_hash_max_size 1024;
  • 上下文: stream块
  • 说明: 设置变量哈希表的最大容量。

variables_hash_bucket_size

  • 语法: variables_hash_bucket_size size;
  • 默认: variables_hash_bucket_size 64;
  • 上下文: stream块
  • 说明: 设置变量哈希桶的容量。

server

  • 语法: server {…}
  • 上下文: stream块
  • 说明: 设置一个属于stream块的server块。
    stream {
    	server {
    		...
    	}
    }
    

listen

  • 语法: listen address:port [ssl] [udp] [proxy_protocol] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
  • 默认:
  • 上下文: stream块中的server块
  • 说明: 设置Nginx监听地址,Nginx从这里接受请求。对于IP协议,这个地址就是address和port;对于UNIX域套接字协议,这个地址就是path。一条listen指令只能指定一个address或者por,当然address也可以是主机名。
    stream {
    	server {
    		# IPv4
    		listen 127.0.0.1:80;
    		listen 127.0.0.1;
    		listen 80;
    		listen *:80;
    		listen localhost:80;
    		
    		# IPv6
    		listen [::]:80;
    		listen [fe80::1];
    		
    		# UNIX
    		listen unix:/usr/local/nginx/logs/nginx.sock;
    	}
    }
    

error_log

  • 语法: error_log file [level];
  • 参数说明:
    • file – 表示存储日志的文件,特殊值stderr表示选择标准错误文件,可以通过指定"syslog:"前缀来配置日志到syslog,可以通过指定"memory:"前缀和缓冲区大小来配置到循环内存缓冲区的日志记录
    • level – 表示日志记录的级别,可以是以下级别之一:debug、info、notice、warn、error、crit、alert或emerg。以上的日志级别是按严重性递增的顺序列出的,设置某个日志级别将导致记录指定的和更严重的日志级别的所有消息,如果省略此参数,则默认使用error级别记录日志
  • 默认: error_log logs/error.log error;
  • 上下文: stream块、stream块中的server块
  • 说明: 配置日志记录,可以在同一配置级别上指定多个日志,如果在全局配置级别上未明确定义将日志写入文件,则将使用默认文件。如果要打印DEBUG级别的日志,需在构建Nginx时加上配置选项: –with-debug

resolver_timeout

  • 语法: resolver_timeout time;
  • 默认: resolver_timeout 30s;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置DNS操作的超时时间。

proxy_protocol_timeout

  • 语法: proxy_protocol_timeout time;
  • 默认: proxy_protocol_timeout 30s;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定读取代理协议报头以完成的超时时间,如果在此时间内没有传输整个报头,连接将关闭。

tcp_nodelay

  • 语法: tcp_nodelay on|off;
  • 默认: tcp_nodelay on;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用或禁用TCP_NODELAY选项的使用,该选项对客户端和代理服务器连接都启用。

preread_buffer_size

  • 语法: preread_buffer_size size;
  • 默认: preread_buffer_size 16k;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定预读缓冲区的大小。

preread_timeout

  • 语法: preread_timeout time;
  • 默认: preread_timeout 30s;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定预读阶段的超时时间。

2.5.3、ngx_stream_geoip_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-stream_geoip_module
该模块需要MaxMind GeoIP库的支持

geoip_country

  • 语法: geoip_country file;
  • 默认:
  • 上下文: stream块
  • 说明: 指定用于根据客户端IP地址确定国家的数据库。使用此数据库时可用以下变量:
    1. $geoip_country_code:两个字母的国家/地区代码,例如"RU"、“US”
    2. $geoip_country_code3:三个字母的国家/地区代码,例如"RUS"、“USA”
    3. $geoip_country_name:国家名称,例如"Russian Federation"、“United States”

geoip_org

  • 语法: geoip_org file;
  • 默认:
  • 上下文: stream块
  • 说明: 指定用于根据客户端 IP 地址确定组织的数据库。使用此数据库时可用以下变量:
    1. $geoip_org:组织名称,例如"The University of Melbourne"

geoip_city

  • 语法: geoip_city file;
  • 默认:
  • 上下文: stream块
  • 说明: 指定用于根据客户端IP地址确定国家、地区和城市的数据库。使用此数据库时可用以下变量:
    1. $geoip_city_continent_code:两个字母的大陆代码,例如"EU"、“NA”
    2. $geoip_city_country_code:两个字母的国家/地区代码,例如"RU"、“US”
    3. $geoip_city_country_code3:三个字母的国家/地区代码,例如"RUS"、“USA”
    4. $geoip_city_country_name:国家名称,例如"Russian Federation"、“United States”
    5. $geoip_dma_code:根据Google AdWords API中的地理定位
    6. $geoip_latitude:纬度
    7. $geoip_longitude:经度
    8. $geoip_region:双符号国家/地区代码(地区、领土、州、省、联邦土地等),例如"48"、“DC”
    9. $geoip_region_name:国家/地区名称(地区、领地、州、省、联邦土地等),例如"Moscow City"、“District of Columbia”
    10. $geoip_city:城市名称,例如"Moscow"、“Washington”
    11. $geoip_postal_code:邮政编码

2.5.4、ngx_stream_geo_module模块

geo

  • 语法: geo [$address] $variable {…}
  • 默认:
  • 上下文: stream块
  • 说明: 根据客户端IP地址创建具有值的变量。

2.5.5、ngx_stream_limit_conn_module模块

limit_conn_zone

  • 语法: limit_conn_zone key zone=name:size;
  • 默认:
  • 上下文: stream块
  • 说明: 设置共享内存区域的参数,该区域将保存各种键的状态。特别地,该状态包括当前的连接数。参数key可以包含文本、变量或者它们的组合,不考虑key值为空的连接。
    stream {
    	limit_conn_zone $binary_remote_addr zone=addr:10m;
    }
    

limit_conn

  • 语法: limit_conn zone number;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 为给定的键值设置共享内存区域和最大允许连接数。当超过此限制时,服务器将返回错误信息以响应请求。
    # 以下示例表示每个IP地址一次只允许一个连接
    stream {
    	limit_conn_zone $binary_remote_addr zone=addr:10m;
    	
    	server {
    		...
    		limit_conn addr 1;
    	}
    }
    

limit_conn_log_level

  • 语法: limit_conn_log_level info|notice|warn|error;
  • 默认: limit_conn_log_level error;
  • 上下文: stream块、stream块中的server块
  • 说明: 为服务器限制连接数的情况设置所需的日志记录级别。

limit_conn_dry_run

  • 语法: limit_conn_dry_run on|off;
  • 默认: limit_conn_dry_run off;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用试运行模式。在这种模式下,连接数没有限制,但是在共享内存区,过多的连接数照常计算。

2.5.5、ngx_stream_log_module模块

log_format

  • 语法: log_format name [escape=default|json|none] string [string …];
  • 参数说明:
    • escape – 表示设置为json或默认字符转义,默认情况下,使用默认转义,
    • default – 对于默认转义,字符"、字符\ 和其它值小于32或大于126的字符将被转义为\xXX,如果没有找到变量值,将记录为连接字符(-
    • json – 对于json转义,json字符串中不允许出现的所有字符将被转义,比如说字符"和字符\将被转义为\"\\,值小于32的字符转义为\n\r\t\b\f\u00XX
    • none – 表示禁用转义
  • 默认:
  • 上下文: stream块
  • 说明: 指定日志格式。
    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"';
    }
    

access_log

  • 语法: access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
        access_log off;
  • 参数说明:
    • path – 表示文件路径,可以通过指定"syslog:"前缀来将日志写入到syslog
    • format – 表示指定日志格式,日志格式由log_format指令设置,如果没有指定格式,则使用预定义的"combined"格式
    • buffer – 表示设置缓冲区的大小,使用该参数后日志将被写到缓冲区,启用缓冲后,以下三种情况将导致数据被写入文件:如果下一个日志行不适合缓冲区;如果缓冲数据的时间超过了flush参数指定的时间;当工作进程重新打开日志文件或关闭时
    • gzip – 表示设置压缩的等级,取值范围为1~9,使用该参数后日志将被写到缓冲区
    • flush – 表示缓冲数据的最大时间
    • if – 表示是否启用条件日志记录,如果条件计算结果为"0"或空字符串,则不会记录请求
    • off – 表示取消当前级别上的所有access_log指令
  • 默认: access_log off;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置缓冲日志写入的路径、格式和配置,可以在同一配置级别上指定多个日志。
    stream {
    	access_log /path/to/log.gz basic gzip flush=5m;
    }
    

open_log_file_cache

  • 语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
  • 参数说明:
    • max – 表示缓存中描述符的最大数量,如果缓存已满,则关闭最近最少使用的描述符(LRU)
    • inactive – 表示如果在此期间没有访问,则设置关闭缓存描述符,缺省值是10秒
    • min_uses – 表示在inactive参数定义的时间内文件使用的最小数量,以让描述符在缓存中保持打开状态,默认情况下为1
    • valid – 表示检查文件名是否仍然存在的时间,缺省为60秒
    • off – 表示禁用缓存
  • 默认: open_log_file_cache off;
  • 上下文: stream块、stream块中的server块
  • 说明: 定义一个缓存,用于存储名称包含变量的常用日志的文件描述符。
    stream {
    	open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
    }
    

2.5.6、ngx_stream_map_module模块

map

  • 语法: map string $variable {…};
  • 默认:
  • 上下文: stream块
  • 说明: 创建一个新变量,其值取决于第一个参数中指定的一个或多个源变量的值。

map_hash_max_size

  • 语法: map_hash_max_size size;
  • 默认: map_hash_max_size 2048;
  • 上下文: stream块
  • 说明: 设置映射变量哈希表的最大容量。

map_hash_bucket_size

  • 语法: map_hash_bucket_size size;
  • 默认: map_hash_bucket_size 32|64|128;
  • 上下文: stream块
  • 说明: 设置映射变量哈希桶的容量。

2.5.7、ngx_stream_proxy_module模块

proxy_pass

  • 语法: proxy_pass address;
  • 默认:
  • 上下文: stream块中的server块
  • 说明: 设置代理服务器的地址,地址可以指定为域名或IP地址,也可以是UNIX域套接字。如果域名解析为多个地址,则所有地址都将以循环方式使用,此外,可以将地址指定为服务器组。
    stream {
    	server {
    		proxy_pass localhost:12345;
    		proxy_pass unix:/tmp/stream.socket;
    	}
    }
    

proxy_bind

  • 语法: proxy_bind address [transparent];
        proxy_bind off;
  • 参数说明:
    • address – 表示IP地址,可以包含变量
    • transparent – 表示允许从非本地IP地址发起与代理服务器的连接
    • off – 表示取消了proxy_bind指令从上一个配置级别继承的影响,它允许系统自动分配本地IP地址和端口
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 从指定的带有可选端口的本地IP地址向代理服务器发起连接。
    stream {
    	proxy_bind $remote_addr transparent;
    }
    

proxy_socket_keepalive

  • 语法: proxy_socket_keepalive on|off;
  • 默认: proxy_socket_keepalive off;
  • 上下文: stream块、stream块中的server块
  • 说明: 为发送到代理服务器的连接配置"TCP keepalive"行为。默认情况下,操作系统的设置对套接字有效,如果该指令的值被设置为"on",则该套接字的SO_KEEPALIVE选项将被打开。

proxy_connect_timeout

  • 语法: proxy_connect_timeout time;
  • 默认: proxy_connect_timeout 60s;
  • 上下文: stream块、stream块中的server块
  • 说明: 定义与代理服务器建立连接的超时时间。需要注意的是,这个超时时间通常不能超过75秒。

proxy_timeout

  • 语法: proxy_timeout time;
  • 默认: proxy_timeout 10m;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置客户机或代理服务器连接上连续的两个读或写操作之间的超时时间,如果在此时间内没有传输数据,连接将关闭。

proxy_buffer_size

  • 语法: proxy_buffer_size size;
  • 默认: proxy_buffer_size 16k;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置用于从代理服务器读取数据的缓冲区的大小,还设置用于从客户端读取数据的缓冲区的大小。

proxy_upload_rate

  • 语法: proxy_upload_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: proxy_upload_rate 0;
  • 上下文: stream块、stream块中的server块
  • 说明: 限制从客户端读取数据的速度。这个限制是针对每个连接设置的,所以如果客户端同时打开两个连接,那么总的速率将是指定限制的两倍。

proxy_download_rate

  • 语法: proxy_download_rate rate;
  • 参数说明:
    • rate – 为0时表示不限速
  • 默认: proxy_download_rate 0;
  • 上下文: stream块、stream块中的server块
  • 说明: 限制从代理服务器读取数据的速度。这个限制是针对每个连接设置的,所以如果客户端同时打开两个连接,那么总的速率将是指定限制的两倍。

proxy_requests

  • 语法: proxy_requests number;
  • 默认: proxy_requests 0;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置客户端与现有UDP流会话之间的绑定被丢弃的客户端数据报的数量。在接收到指定数量的数据报后,来自同一客户机的下一个数据报将启动一个新的会话,当所有客户端数据报都传输到代理服务器并接收到预期的响应数时,或者当会话达到超时时,会话将终止。

proxy_responses

  • 语法: proxy_responses number;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 如果使用UDP协议,设置期望从代理服务器响应客户端数据报的数据报数,number作为会话终止的提示。默认情况下,不限制数据报的数量,如果number设置为0,则不期望响应。但是,如果接收到响应,而会话仍未完成,则将处理响应。

proxy_next_upstream

  • 语法: proxy_next_upstream on|off;
  • 默认: proxy_next_upstream on;
  • 上下文: stream块、stream块中的server块
  • 说明: 当无法建立到代理服务器的连接时,确定是否将客户端连接传递到下一个服务器,将连接传递到下一个服务器可能受到尝试次数和时间的限制。

proxy_next_upstream_tries

  • 语法: proxy_next_upstream_tries number;
  • 默认: proxy_next_upstream_tries 0;
  • 上下文: stream块、stream块中的server块
  • 说明: 限制请求传递到下一个服务器的可能尝试次数,number为0时表示关闭此限制。

proxy_next_upstream_timeout

  • 语法: proxy_next_upstream_timeout time;
  • 默认: proxy_next_upstream_timeout 0;
  • 上下文: stream块、stream块中的server块
  • 说明: 限制请求传递到下一个服务器的时间,time为0时表示关闭此限制。

proxy_protocol

  • 语法: proxy_protocol on|off;
  • 默认: proxy_protocol off;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用PROXY协议以连接到代理服务器。

proxy_ssl

  • 语法: proxy_ssl on|off;
  • 默认: proxy_ssl off;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用连接到代理服务器的SSL/TLS协议。

proxy_ssl_session_reuse

  • 语法: proxy_ssl_session_reuse on|off;
  • 默认: proxy_ssl_session_reuse on;
  • 上下文: stream块、stream块中的server块
  • 说明: 确定在使用代理服务器时SSL会话是否可以重用。如果日志中出现错误"SSL3_GET_FINISHED:digest check failed",请尝试禁用会话重用。

proxy_ssl_protocols

  • 语法: proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用连接到代理服务器的指定协议。

proxy_ssl_ciphers

  • 语法: proxy_ssl_ciphers ciphers;
  • 默认: proxy_ssl_ciphers DEFAULT;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定连接到代理服务器的启用密码,密码以OpenSSL库能够理解的格式指定。可以使用"openssl ciphers"命令查看完整列表。

proxy_ssl_name

  • 语法: proxy_ssl_name name;
  • 默认: proxy_ssl_name host from proxy_pass;
  • 上下文: stream块、stream块中的server块
  • 说明: 允许覆盖用于验证代理服务器的证书的服务器名,并在与代理服务器建立连接时通过SNI传递,服务器名也可以使用变量来指定。默认情况下,使用proxy_pass地址的主机部分。

proxy_ssl_server_name

  • 语法: proxy_ssl_server_name on|off;
  • 默认: proxy_ssl_server_name off;
  • 上下文: stream块、stream块中的server块
  • 说明: 在与代理服务器建立连接时,启用或禁用通过TLS服务器名称指示扩展(SNI, RFC 6066)传递服务器名。

proxy_ssl_verify

  • 语法: proxy_ssl_verify on|off;
  • 默认: proxy_ssl_verify off;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用或禁用对代理服务器证书的验证。

proxy_ssl_verify_depth

  • 语法: proxy_ssl_verify_depth number;
  • 默认: proxy_ssl_verify_depth 1;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置代理服务器证书链中的验证深度。

proxy_ssl_trusted_certificate

  • 语法: proxy_ssl_trusted_certificate file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证代理服务器的证书。

proxy_ssl_crl

  • 语法: proxy_ssl_crl file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证代理服务器的证书。

proxy_ssl_certificate

  • 语法: proxy_ssl_certificate file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的证书用于验证代理服务器的证书。

proxy_ssl_certificate_key

  • 语法: proxy_ssl_certificate_key file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的带密钥的证书用于验证代理服务器的证书。可以指定值engine:name:id代替文件,它从OpenSSL engine name中加载具有指定id的密钥。

proxy_ssl_password_file

  • 语法: proxy_ssl_password_file file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

2.5.8、ngx_stream_realip_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-stream_realip_module

set_real_ip_from

  • 语法: set_real_ip_from address|CIDR|unix:;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 定义已知可发送正确替换地址的可信地址,如果指定了特殊值unix:,表示所有unix域套接字都是可信的,可信地址也可以使用主机名来指定。

2.5.9、ngx_stream_return_module模块

return

  • 语法: return value;
  • 默认:
  • 上下文: stream块中的server块
  • 说明: 指定要发送给客户端的值,该值可以包含文本、变量或者它们的组合。

2.5.10、ngx_stream_split_clients_module模块

split_clients

  • 语法: split_clients string $variable {…}
  • 默认:
  • 上下文: stream块
  • 说明: 为A/B测试创建一个变量。
    # 原始字符串的值使用MurmurHash2哈希。在以下示例中,散列值从0到21474835(0.5%)对应于值".one"的的$variant变量,散列值从21474836到107374180(2%)对应于值".two",并且散列值从107374181到4294967295对应于值""(空字符串)。
    stream {
    	split_clients "${remote_addr}AAA" $variant {
    				0.5%               .one;
    				2.0%               .two;
    				*                  "";
    	}
    }
    

2.5.11、ngx_stream_ssl_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-stream_ssl_module

ssl_handshake_timeout

  • 语法: ssl_handshake_timeout time;
  • 默认: ssl_handshake_timeout 60s;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定完成SSL握手的超时时间。

ssl_certificate

  • 语法: ssl_certificate file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 为给定的服务器指定PEM格式的证书文件。如果除主证书外还应指定中间证书,则应按以下顺序在同一文件中指定它们:首先是主证书,然后是中间证书。PEM格式的密钥可以放在同一个文件中。可以在参数file中使用变量。

ssl_certificate_key

  • 语法: ssl_certificate_key file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 为给定的服务器指定PEM格式的密钥文件。可以指定值engine:name:id,而不是file,它从OpenSSL engine name中加载具有指定id的密钥。可以指定值data:$variable而不是file,该文件不使用中间文件从变量加载密钥,需要注意的是,这种语法的不适当使用可能会带来安全隐患,比如将密钥数据写入错误日志。可以在参数file中使用变量。

ssl_password_file

  • 语法: ssl_password_file file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个带有密钥密码短语的文件,其中每个密码短语在单独的行上指定,在加载密钥时依次尝试密码短语。

ssl_dhparam

  • 语法: ssl_dhparam file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 为DHE密码指定一个带有DH参数的文件,默认情况下,没有设置任何参数,因此不会使用DHE密码。

ssl_ecdh_curve

  • 语法: ssl_ecdh_curve curve;
  • 默认: ssl_ecdh_curve auto;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定ECDHE密码的curve。特殊值auto指示Nginx在使用OpenSSL 1.0.2或更高版本时,或使用旧版本的prime256v1时,使用OpenSSL库中的内置列表。

ssl_protocols

  • 语法: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
  • 默认: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用指定的协议。

ssl_ciphers

  • 语法: ssl_ciphers ciphers;
  • 默认: ssl_ciphers HIGH:!aNULL:!MD5;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定启用的密码。密码以OpenSSL库理解的格式指定,可以使用"openssl ciphers"命令查看完整列表。
    stream {
    	ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    }
    

ssl_verify_client

  • 语法: ssl_verify_client on|off|optional|optional_no_ca;
  • 默认: ssl_verify_client off;
  • 上下文: stream块、stream块中的server块
  • 说明: 允许验证客户端证书,验证结果存储在 $ssl_client_verify 变量中。如果在客户端证书验证过程中发生错误,或者客户端没有提供所需的证书,连接将关闭。参数optional表示请求客户端证书,并验证证书是否存在。参数optional_no_ca表示请求客户端证书,但不要求它由受信任的CA证书签名,这适用于Nginx外部的服务执行实际证书验证的情况。证书的内容可以通过 $ssl_client_cert 变量访问。

ssl_verify_depth

  • 语法: ssl_verify_depth number;
  • 默认: ssl_verify_depth 1;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置客户端证书链中的验证深度。

ssl_client_certificate

  • 语法: ssl_client_certificate file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书文件用于验证客户端的证书。证书列表将发送给客户端,如果不希望这样,可以使用ssl_trusted_certificate指令。

ssl_trusted_certificate

  • 语法: ssl_trusted_certificate file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的受信任CA证书用于验证客户端的证书。

ssl_prefer_server_ciphers

  • 语法: ssl_prefer_server_ciphers on|off;
  • 默认: ssl_prefer_server_ciphers off;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定使用SSLv3和TLS协议时,服务器密码应该优先于客户端密码。

ssl_session_cache

  • 语法: ssl_session_cache off|none|[builtin[:size]] [shared:name:size];
  • 参数说明:
    • off – 表示严格禁止使用会话缓存,Nginx明确告诉客户端会话不能被重用
    • none – 表示不允许使用会话缓存,Nginx告诉客户端可以重用会话,但实际上并不在缓存中存储会话参数
    • builtin – 表示一个内置于OpenSSL的缓存,仅由一个工作进程使用,缓存大小在会话中指定,如果未给出大小,则等于20480个会话,使用内置缓存可能会导致内存碎片
    • shared – 表示在所有工作进程之间共享的缓存,缓存大小以字节为单位,1M字节可以存储大约4000个会话,每个共享缓存应该有一个任意名称,同名缓存可用于多个虚拟服务器
  • 默认: ssl_session_cache none;
  • 上下文: stream块、stream块中的server块
  • 说明: 设置存储会话参数的缓存的类型和大小。

ssl_session_tickets

  • 语法: ssl_session_tickets on|off;
  • 默认: ssl_session_tickets on;
  • 上下文: stream块、stream块中的server块
  • 说明: 启用或禁用通过TLS会话票证恢复会话。

ssl_session_ticket_key

  • 语法: ssl_session_ticket_key file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 设置具有用于加密和解密TLS会话票据的秘钥的文件,如果多个服务器之间必须共享相同的密钥,那么该指令是必要的,缺省情况下,使用随机生成的密钥。
    stream {
    	# 如果指定了几个密钥,则只使用第一个密钥加密TLS会话票证,这允许配置密钥轮换,例如:
    	ssl_session_ticket_key current.key;
    	ssl_session_ticket_key previous.key;
    	
    	# file必须包含80或48字节的随机数据,可以使用以下命令创建:
    	openssl rand 80 > ticket.key
    	
    	# 根据文件大小,使用AES256(对于80字节密钥)或AES128(对于48字节密钥)进行加密
    }
    

ssl_session_timeout

  • 语法: ssl_session_timeout time;
  • 默认: ssl_session_timeout 5m;
  • 上下文: stream块、stream块中的server块
  • 说明: 指定客户端可以重用会话参数的时间。

ssl_crl

  • 语法: ssl_crl file;
  • 默认:
  • 上下文: stream块、stream块中的server块
  • 说明: 指定一个PEM格式的撤销证书(CRL)用于验证客户端的证书。

2.5.12、ngx_stream_ssl_preread_module模块

要使用该模块需要在构建Nginx时加上配置选项: –with-stream_ssl_preread_module

ssl_preread

  • 语法: ssl_preread on|off;
  • 默认: ssl_preread off;
  • 上下文: stream块、stream块中的server块
  • 说明: 允许在预读取阶段从ClientHello消息中提取信息。

2.5.13、ngx_stream_upstream_module模块

upstream

  • 语法: upstream name {…}
  • 默认:
  • 上下文: stream块
  • 说明: 定义一组服务器,服务器可以监听不同的端口,此外,侦听TCP和unix域套接字的服务器可以混合使用。
    # 缺省情况下,服务器之间采用加权轮询方式进行连接分配。在以下示例中,每7个连接将按如下方式分布:
    # 5个连接到backend1.example:12345,一个连接到第二个和第三个服务器。如果在与服务器通信期间发生错误,
    # 该连接将被传递到下一个服务器,以此类推,直到尝试所有正常工作的服务器。如果与所有服务器的通信失败,连接将被关闭。
    stream {
    	upstream backend {
    		server backend1.example:12345 weight=5;
    		server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
    		server unix:/tmp/backend2;
    		server backend3.example:12345 resolve;
    
    		server backup1.example:12345  backup;
    	}
    }
    

server

  • 语法: server address [parameters];
  • 默认:
  • 上下文: stream块中的upstream块
  • 说明: 定义服务器的地址和其他参数,该地址可以指定为带有可选端口域名或IP地址,也可以指定为"unix:"前缀后指定的UNIX域套接字路径,如果不指定端口,则默认使用80端口。解析为多个IP地址的域名同时定义了多个服务器。可以定义以下参数:
    1. weight=number:设置服务器的权重,默认为1
    2. max_conns=number:限制number到代理服务器的最大同时活动连接数,默认值为零,表示没有限制。如果服务器组不驻留在共享内存中,则限制适用于每个工作进程
    3. max_fails=number:设置在fail_timeout参数设置的持续时间内应该发生的与服务器通信的失败尝试次数,以考虑服务器在fail_timeout参数设置的持续时间内不可用。默认情况下,不成功尝试的次数设置为1,设置为0时表示禁用尝试记帐。被视为不成功的尝试由proxy_next_upstream、fastcgi_next_upstream、uwsgi_next_upstream、scgi_next_upstream、memcached_next_upstream和grpc_next_upstream指令定义。
    4. fail_timeout=time:该参数表示与服务器通信失败的指定次数发生的时间,认为服务器不可用;服务器将被视为不可用的时间段。默认情况下,该参数设置为10秒
    5. backup:将服务器标记为备份服务器,当主服务器不可用时,它将传递请求
    6. down:将服务器标记为永久不可用
    7. resolve:监控服务器域名对应的IP地址的变化,并自动修改upstream配置而不需要重新启动Nginx,服务器组必须位于共享内存中,为了让这个参数工作,resolver指令必须在http块或相应的upstream块中指定
    8. route=string:设置服务器路由名称
    9. service=name:启用解析DNS SRV记录并设置服务名,为了使该参数起作用,必须为服务器指定解析参数并指定不带端口号的主机名
    10. slow_start=time:设置服务器将其权重从0恢复到标称值的时间,即不正常的服务器变为正常的时间,或服务器在一段时间内被认为不可用后恢复可用的时间,默认值为0,即禁用慢启动
    11. drain:使服务器进入"draining"模式,在这种模式下,只有绑定到服务器的请求才会被代理到服务器

2.5.14、ngx_stream_upstream_hash_module模块

hash

  • 语法: hash key [consistent];
  • 默认:
  • 上下文: stream块中的upstream块
  • 说明: 为服务器组指定负载均衡方法,其中客户端-服务器的映射是基于hash key的。key可以包含文本、变量或者它们的组合。需要注意的是,从组中添加或删除服务器可能导致将大多数key重新映射到不同的服务器。该方法与Cache::Memcached Perl库兼容。如果指定了consistent参数,则将使用ketama一致性哈希方法,该方法确保在向组中添加或从组中删除服务器时,只有少数键将被重新映射到不同的服务器,这有助于为缓存服务器实现更高的缓存命中率,该方法兼容Cache::Memcached::Fast Perl库,ketama_points参数设置为160。

2.5.15、ngx_stream_upstream_least_conn_module模块

least_conn

  • 语法: least_conn;
  • 默认:
  • 上下文: stream块中的upstream块
  • 说明: 指定组应使用负载均衡方法,将请求传递给活动连接数最少的服务器,并考虑服务器的权重。如果有多个这样的服务器,则使用加权循环平衡方法依次尝试它们。

2.5.16、ngx_stream_upstream_random_module模块

random

  • 语法: random [two [method]];
  • 参数说明:
    • two – 表示Nginx随机选择两个服务器,然后使用指定的method选择一个服务器
    • method – 有两种选择:
      1. 默认是least_conn,它将请求传递给活动连接数最少的服务器
      2. least_time将请求传递给具有最少平均响应时间和最少活动连接数的服务器
  • 默认:
  • 上下文: stream块中的upstream块
  • 说明: 指定组应使用负载均衡方法,将请求传递给随机选择的服务器,并考虑服务器的权重。

2.5.17、ngx_stream_upstream_zone_module模块

zone

  • 语法: zone name [size];
  • 默认:
  • 上下文: stream块中的upstream块
  • 说明: 定义共享内存区域的name和size,该区域保持工作进程之间共享的组配置和运行时状态,几个组可能共享同一个区域,在这种情况下,只指定一次size就足够了。

本文标签: 最全 指令 建议 收藏 nginx