硬核!全网最全Nginx配置指令,建议收藏~
Posted 彼 方
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了硬核!全网最全Nginx配置指令,建议收藏~相关的知识,希望对你有一定的参考价值。
硬核!全网最全nginx配置指令,建议收藏~
- 1、前言
- 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.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.2、Nginx配置符号参考
符号 | 说明 |
---|---|
k,K | 千字节 |
m,M | 兆字节 |
g,G | 千兆字节 |
示例:“13k”、“9m”
符号 | 说明 |
---|---|
ms | 毫秒 |
s | 秒 |
m | 分钟 |
h | 小时 |
d | 日 |
w | 周 |
M | 一个月,30天 |
y | 年,365天 |
示例:“1h20m"代表"1小时30分”,“2y7M"代表"2年零7个月”
1.3、本文出现的一些词汇介绍
符号 | 说明 |
---|---|
上下文 | 用来表示该指令可以出现的区域 |
time | 代表时间,时间符号详见表2-2,如果不加时间符号则代表秒 |
file | 表示文件路径 |
prefix | prefix是配置时设置的,${prefix} 默认为 /usr/local/nginx |
number | 整型数 |
size | 代表文件大小,容量符号详见表2-1,默认不加容量符号则代表字节 |
path | 表示目录名 |
string | 普通字符串 |
rate | 单位是字节/秒,写法和size的格式是一样的 |
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.com为主服务器名称 http { server { server_name bifang.com www.bifang.com; } }
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;
- 以上是关于硬核!全网最全Nginx配置指令,建议收藏~的主要内容,如果未能解决你的问题,请参考以下文章
2.3W字,这可能是把Nginx讲得最全面的一篇文章了,建议收藏备用