硬核!全网最全nginx配置指令,建议收藏~(代码片段)

彼方 彼方     2022-11-29     557

关键词:

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

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_browserhtml 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配置指令,建议收藏~(代码片段)

    硬核!全网最全Nginx配置指令,建议收藏~1、前言1.1、Nginx配置文件各个主配置块说明1.2、Nginx配置符号参考1.3、本文出现的一些词汇介绍2、正文2.1、位于全局块的配置指令2.2、位于events块的配置指令2.3、位于http块的配置... 查看详情

    硬核!全网最全nginx配置指令,建议收藏~(代码片段)

    硬核!全网最全Nginx配置指令,建议收藏~1、前言1.1、Nginx配置文件各个主配置块说明1.2、Nginx配置符号参考1.3、本文出现的一些词汇介绍2、正文2.1、位于全局块的配置指令2.2、位于events块的配置指令2.3、位于http块的配置... 查看详情

    这可能是把nginx讲得最全面的一篇文章了,建议收藏备用(代码片段)

    点击上方关注“终端研发部”设为“星标”,和你一起掌握更多数据库知识前言Nginx概述Nginx特点Nginx作用Nginx安装Nginx常用命令Nginx核心配置配置文件结构配置文件main段核心参数配置文件events段核心参数server_name指令rootaliasloca... 查看详情

    2.3w字,这可能是把nginx讲得最全面的一篇文章了,建议收藏备用(代码片段)

    前言Nginx概述Nginx特点Nginx作用Nginx安装Nginx常用命令Nginx核心配置配置文件结构配置文件main段核心参数配置文件events段核心参数server_name指令rootaliaslocationrewriteif指令autoindex变量Nginx应用核心概念正向代理反向代理动静分离负载均... 查看详情

    全网最全linux命令总结!!(史上最全,建议收藏)(代码片段)

    大家好,我是冰河~~最近家里的事情太多了,很久没更新技术文了。期间,也收到了很多小伙伴的鼓励,谢谢大家的帮助和支持,我想感谢大家最好的方式就是持续分享好的技术文章了吧,让自己和他人持... 查看详情

    全网最全linux命令总结!!(史上最全,建议收藏)(代码片段)

    大家好,我是冰河~~最近家里的事情太多了,很久没更新技术文了。期间,也收到了很多小伙伴的鼓励,谢谢大家的帮助和支持,我想感谢大家最好的方式就是持续分享好的技术文章了吧,让自己和他人持... 查看详情

    建议收藏ヾ(^▽^*)))全网最全输入输出格式符整理(代码片段)

    输入输出格式符前言数据输入语句一、scanf函数格式字符串1)类型2)“*”符3)宽度4)长度二、getchar函数数据输出语句一、printf函数调用的一般形式二、格式字符串三、字符输出函数(putchar)总结前言大... 查看详情

    mybatis从前世到今生一网打尽(全网最全,建议收藏)(代码片段)

    一、框架概述1.1软件开发常用结构1.1.1、三层架构​三层架构包含的三层:界面层(UserInterfacelayer)业务逻辑层(BusinessLogicLayer)数据访问层(Dataaccesslayer)​三层架构分别的职责是:界面层(... 查看详情

    2021年全网最全java面试总结及答案建议收藏(代码片段)

    下面是本次总结包含Java内容:多线程,并发及线程基础数据类型转换的基本原则垃圾回收(GC)Java集合框架数组字符串GOF设计模式SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)设计原则... 查看详情

    mybatis从前世到今生一网打尽(全网最全,建议收藏)(代码片段)

    一、框架概述1.1软件开发常用结构1.1.1、三层架构三层架构包含的三层:界面层(UserInterfacelayer)业务逻辑层(BusinessLogicLayer)数据访问层(Dataaccesslayer)三层架构分别的职责是:界面层(表示... 查看详情

    全网最全html标签详解大全-第一篇建议收藏(代码片段)

    前文导读:前端学习路线Html代码都是由标签组成的,标签就是最基础的东西,所以我们要重点学习这些标签。本人爆肝整理了几乎所有常用的标签详解,期待各位的关注与支持。废话少说直接进入重点。基本结构... 查看详情

    2023最新整理!全网最全python标准库总结(学习宝典,建议收藏)(代码片段)

    标准库Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。Python... 查看详情

    建议收藏万字长文,教你发布鸿蒙(harmonyos)组件到maven中央仓库,全网最全教程!(代码片段)

            目录1.使用组件的3种方式(1)引用同工程中的HarmonyOS组件(以调试为目的)(2)引用本地的HarmonyOS组件(3)引用Maven中央仓库中的HarmonyOS组件2.组件可以发布到哪里(1)没有自... 查看详情

    万字长文!全网最全最细mysqlsql语句大全(建议收藏)

    关注我,每天分享软件测试技术干货、面试经验,想要领取测试资料、进入软件测试学习交流群的可以直接加群644956177~~这篇文章主要向大家介绍MySQLsql语句大全,主要内容包括基础应用、实用技巧、原理机制等方面,... 查看详情

    全网最全性能优化总结!!(冰河吐血整理,建议收藏)

    大家好,我是冰河~~随着互联网的高速发展,互联网行业已经从IT时代慢慢步入到DT时代。对于Java程序员的要求越来越高,只是单纯的掌握CRUD以不足以胜任互联网公司的相关职位,大量招聘岗位显示:如果是面... 查看详情

    ❤️《画解数据结构》全网最全栈总结,九个动画组图轮播,不懂都难❤️(建议收藏)(代码片段)

    零、前言  「数据结构」和「算法」是密不可分的,两者往往是「相辅相成」的存在,所以,在学习「数据结构」的过程中,不免会遇到各种「算法」。  到底是先学数据结构,还是先学算法,我认为... 查看详情

    ❤️《画解数据结构》全网最全栈总结,九个动画组图轮播,不懂都难❤️(建议收藏)(代码片段)

    本文已收录于专栏🌳《画解数据结构》🌳零、前言  「数据结构」和「算法」是密不可分的,两者往往是「相辅相成」的存在,所以,在学习「数据结构」的过程中,不免会遇到各种「算法」。  到... 查看详情

    耗时一周深入理解jvm虚拟机异常处理字节码性能优化,全网最全面的jvm原理通俗易懂(强烈建议收藏)(代码片段)

    深入JVM精益、平均的JVM虚拟机什么是Java虚拟机?为什么会在这里?Java字节码虚拟零件骄傲的,少数的,登记册方法区和程序计数器Java堆栈和相关寄存器垃圾收集堆永恒的数学:JVM模拟Java虚拟机如何处理异常... 查看详情