Nginx配置文件nginx.conf配置中文详解

版本:1.15.7 设置成黑色粗体的指令是常用的或者是调优时可能会用到的

  • nginx.conf配置文件的结构大体可以分为三大模块:全局模块(设置影响Nginx服务器整体运行的指令)、events模块(设置影响Nginx服务器与用户的网络连接指令)、http模块(代理、缓存和日志等大多数功能以及第三方模块配置)

全局模块(除一下指令外还包括一些配置文件的引入等)

在unix系统中是否以守护进程的方式运行nginx,如果开启则以单个进程的方式运行nginx,一般不会开启
daemon off 默认是on 一般用于开发

是否以master/worker方式进行工作,如果关闭nginx就不会创建出worker子进程来处理请求,而是用master进程自身来处理请求 一般用于开发
master_process off 默认是on

worker进程中的减时计时器,设置的是时间间隔的大小 具体的间隔实现方式取决于选择的事件驱动模型 一般无需设置 默认不设置
timer_resolution

设置锁的名称以及路径前缀 在某些系统使用lock file实现锁的情况下才有效 否则该指令无效 一般无需设置 默认 logs/nginx.lock
lock_file

出现内部错误是以便让用户使用调试器分析 一般无需设置 默认不设置
debug_points stop|abort

设置worker 进程的优先级 zhi值越低优先级越高 -20 到 20 默认是0
worker_priority

绑定worker进程到指定的cpu内核,每一个worker进程都独享一个CPU,可以在内核的调度策略上实现完全的并发 默认不绑定任何cpu集合
worker_cpu_affinity

更改工作进程的核心文件(RLIMIT_CORE)的大小限制。用于在不重启主进程的情况下修改这个限制 默认不设置
worker_rlimit_core

该值为单个工作进程可以打开的最大的文件数量,一般会把它调高点,以防报错 “too many open files” 的问题 默认不设置
worker_rlimit_nofile

设置工作进程核心文件的路径 一般无需设置
working_directory

设置nginx停止的超时时间 默认不设置
worker_shutdown_timeout

设置nginx的环境变量 一般无需配置 默认TZ
env

动态加载某个模块
load_module

运行时的用户和组,如果组没有指定,则用户和组一致 默认是 nobody nobody
user nobody;

nginx的工作进程,一般和cpu的核数一样,auto是nginx自动检测 默认是1
worker_processes 某个数值|auto

错误日志输出路径,可以配置不同的日志级别输出到不同的文件 可使用在全局模块, http模块, mail模块, stream模块, server模块, location模块
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;

配置存放nginx master进程的pid的文件路径和文件名,可以通过获取该文件中的进程号,来杀掉该进程号来强制停止nginx,不过一般不太推荐这种方式
pid logs/nginx.pid;

引入某个文件或者符合某个格式的一系列文件 用于任何地方
include var/*.conf;

定义硬件SSL加速器的名称 默认不设置
ssl_engine

events模块(除一下指令外还包括是否允许同时接收多个网络连接、选取哪种事件驱动模型处理连接请求等)

events模块定义的是单个工作进程可以同时支持的连接数(单个work_processe并发数)以及是否序列化网络连接等。

 events {
 	....
 }

单个工作进程最大连接数(包括代理服务器的连接)
worker_connections 某个数值; 默认512 尽量是小于或等于worker_rlimit_nofile

选择事件驱动模型 通常不需要指定,nginx会自动选择最高效的方式 默认不设置
use select|poll|kqueue|epoll|rtsig|dev/poll|eventport

每个工作进程是否同时接收多个网络连接,如果是off则每次只接收一个连接
multi_accept on|off 默认off

是否网络连接序列化,如果不开启可能出现“惊群”问题
accept_mutex on|off 默认off (版本1.11.3默认值是on)

指定工作进程尝试重新启动接受新连接的最长时间,在开启了网络连接序列化的情况下才有效 默认 500ms
accept_mutex_delay 某个时间数值(ms)

为选定的客户端连接启用调试日志。其他连接将使用ERROR_LOG指令设置的日志级别。默认不设置
debug_connection ip地址|某个子网地址|unix套接字

指令作用域:大多数指令不是属于特定某一个模块,同一个指令在不同的模块的作用域不同,采用“就近原则”,如果高一级模块中和低一级模块中都出现了某个相同的指令,则以低一级的模块的指令为准。

http模块(设置和http请求相关的指令,如连接超时时间、MIME-Type等)

http{
       .... http自身模块的全局配置
    	server{
  			.... server 自身的全局配置
	  		location [表达式]{
			...   
	  		}
	  		location [表达式]{
	  			...  
	  		}
   		}  
    	server{
   			...
   		}
}

以下介绍的是http模块中的内容:
引入文件,设置mime类型
include mime.types;

设置默认用于处理前端请求的MIME类型 默认是 text/plain 可用于http模块, server模块, location模块
default_type application/octet-stream;

设置请求访问日志的记录格式
log_format main '$remote_addr KaTeX parse error: Expected 'EOF', got '\[' at position 14: remote\_user \̲[̲time_local] “KaTeX parse error: Double superscript at position 14: request" ' '̲status b o d y _ b y t e s _ s e n t " body\_bytes\_sent " body_bytes_sent"http_referer” ’
‘“ h t t p _ u s e r _ a g e n t " " http\_user\_agent" " http_user_agent""http_x_forwarded_for”’;

该处的日志指的是前端访问的日志,和error_log有所区别,设置日志写入的路径、格式和配置,比如设置缓冲区大小 压缩级别、刷新日志的间隔、额外的判断条件。默认logs/access.log combined;
access_log logs/access.log main; main就是上述定义的日志格式的别名

开启sendfile 可以减少系统在文件读取和写入的上下文切换以及减少文件的拷贝次数,sendfile(socket,file, len);j句柄是文件,对于nginx用于静态资源服务器来说能提高性能,但对于作为代理服务器来说开启sendfile并无效果。默认off,可用到http模块、server模块、location模块中。
sendfile on;

设置单个工作进程每次调用sendfile传输的最大数据量,如果设置为0,则不限制。默认是0
sendfile_max_chunk

设置传输数据时,应用程序接收数据包,等到数据包最大时再一次性传输出去,和tcp_nodelay互斥。只有在send_file 开启是才有效。默认是off 对于大文件传输十分有利。
tcp_nopush on;

设置传输数据时,应用程序接收到数据包就马上传输出去。默认是on
tcp_nodelay on;

设置http连接超时时间,设置过大会导致占用过多的http连接,会导致tcp连接数过大,系统崩溃;调过小导致大文件上传失败;默认值是75s,单位是s
第一个参数是设置连接超时时间,第二个参数是设置到http的header的Keep-Alive属性上面。
keepalive_timeout 0 0;

设置开启或禁用gzip压缩。默认off,gzip相关的指令都可以在http模块, server模块, location模块设置
gzip on;

设置用于压缩响应的缓冲区的数量和大小。默认根据平台的不同 32 4k|16 8k
gzip_buffers 32 4k;

设置压缩级别,默认1 取值范围1到9
gzip_comp_level

禁用具有“User-Agent”http的header属性的请求的gzip响应,该指令与任何指定的正则表达式匹配。默认不设置
gzip_disable

设置压缩响应所需的请求的最低HTTP版本。默认1.1
gzip_http_version

设置进行压缩的最小响应长度,由“Content-Length”字段的值决定。
根据代理请求的请求头的属性,如“Expires”、“Cache-Control”、“Last-Modified”、“ETag”、“Authorization”来决定是否启用gzip压缩或者对任何的代理请求都启用gzip压缩,默认是off
gzip_proxied off;

设置除了“text/html”需要压缩的mime类型,默认是text/html。
gzip_types

设置在开启gzip、gzip_static、gunzip的情况下 在响应头的添加“Vary: Accept-Encoding”属性,默认是off
gzip_vary

设置变量哈希表的大小,变量指的是那些 h o s t 、 host、 hostremote_addr等。默认是64 不常用
variables_hash_bucket_size

设置变量哈希表的最大大小默认是1024 不常用
variables_hash_max_size

设置服务器名的哈希表大小 默认值取决于处理器缓存行大小 有32|64|128
server_names_hash_bucket_size

设置服务器名的哈希表的最大大小 默认512
server_names_hash_max_size

设置绝对路径重定向时URL中的主机名称是有server_name来指定,如果没有server_name则使用服务器的ip。默认是off,也就是使用服务器的ip
server_name_in_redirect

设置是否在绝对路径重定向时使用监听端口
port_in_redirect

设置每个连接的内存分配大小,一般无需设置
connection_pool_size

设置每个qi请求的内存分配大小。一般无需设置
request_pool_size

设置传输请求头的超时时间,如若超时则出现408(请求超时)默认60s
client_header_timeout

sh设置请求头缓冲区大小 默认1k,如果包含了cookie或者wap客户端的请求,那么1k可能会不足,可使用large_client_header_buffers增加较大的缓冲区
client_header_buffer_size

设置较大的客户端请求头的缓冲区大小
large_client_header_buffers

设置是否忽略无效的请求头属性 默认是on
ignore_invalid_headers

设置是否将URI中的两个或多个相邻斜杠压缩为单个斜杠,但如果URI包含base64编码的名称,则必须关闭压缩 默认是on
merge_slashes

设置是否允许在请求头中的属性使用下划线命名,默认是off
underscores_in_headers

设置将文件扩展名映射到相应的mime类型
types

设置类型哈希表的大小 默认64
types_hash_bucket_size

设置le类型哈希表的最大大小,默认1024
types_hash_max_size

设置请求根目录
root

location ^~ /t/ { 
  root /www/root/html/;
}

若请求/t/img.png,则返回/www/root/html/t/img.png的文件
设置请求体的最大大小,对应的是“Content-Length”
client_max_body_size

设置请求体缓冲区大小,超过缓冲区大小,则有部分或全部请求体写入临时文件,x86平台默认值是8k,其他平台 16k
client_body_buffer_size

设置获取请求体的超时时间,默认是60s
client_body_timeout

设置当请求体超过缓冲区大小时,产生临时文件的存储路径,最多可使用三级子目录
client_body_temp_path

设置是否将请求体全部都保存到临时文件中,如果开启 则不会删除临时文件,设置为clean则会删除保存的文件,默认值是off,表示禁用写入临时文件
client_body_in_file_only

设置是否将整个请求体保存到单个缓冲区。默认值是off
client_body_in_single_buffer

设置子请求的缓冲区大小(在当前的一个请求中nginx再生成一个请求)
subrequest_output_buffer_size

设置响应到客户端的超时时间
send_timeout 默认60s 设置推迟传输数据,直到数据量至少达到该指令设置的值
postpone_output 默认值1460

设置向客户端传输数据的单个连接的传输速度
limit_rate 默认不限制 即0

设置http请求传输多少字节后开始限速
limit_rate_after 默认值是0

设置一个长连接上最多能发送的请求数量,超过keepalive_requests数量时server端会关闭该长连接 可能会造成数据丢失 keepalive_requests 默认值100
keepalive_requests

设置禁止在该指令定义的浏览器保持长连接
keepalive_disable 默认值msie6

设置nginx如何关闭客户端连接,值为on表示nginx在关闭tcp连接之前,如果nginx启发式算法预测客户端存在额外发送数据的可能性就会等待并处理(忽略)客户端发送过来的数据;值是always表示任何情况下都会等待并处理;off表示直接关闭
lingering_close 默认值是on

设置在启用lingering_close的情况下,nginx处理并且忽略客户端发送过来额外数据的最长时间,超过该时间则将关闭连接
lingering_time 默认值30s

设置等待客户端发送额外数据的最长时间,若该段时间内无数据传输,则关闭tcp连接,否则处理并忽略之后再等待 直到关闭tcp连接。
lingering_timeout 默认值5s

设置关闭超时的客户端连接,能够释放客户端所占用的内存空间
reset_timeout_connection

设置nginx相对路径的重定向
absolute_redirect 默认是on

设置某个location下的资源只允许内部请求,外部请求不允许访问,如果访问了则返回404
internal

设置是否将未找到文件的错误记录到error_log中
log_not_found 默认值on

设置是否将子请求记录到access_log当中 log_subrequest 默认是off
log_subrequest

设置是否可以多次重定向到error_page
recursive_error_pages 默认是off

设置显示或隐藏掉nginx版本号
server_tokens 默认是on

设置nginx如何比较服务端的Last-Modified和浏览器端的if-modified- since时间,exact表示精确比较;off表示忽略“If-Modified-Since”请求头;before表示文件的最后修改时间早于或等于浏览器端的if-modified-since时间;返回304,也就是可重用浏览器缓存
if_modified_since 默认值是exact

设置限制客户端请求的最大字节数
max_ranges

设置是否允许在HTTP/1.1中禁用f分块编码
chunked_transfer_encoding 默认是on

设置是否自动生成静态资源的“ETag”请求头属性
etag 默认是on

设置请求错误的uri 如 error_page 400 /404.html error_page code uri; error_page

设置缓存静态文件的元信息,在这些静态文件被频繁访问时可以显着提升性能。前提是开启了sendfile;额外的两个参数,max表示缓存文件的最大数目,inactive表示在该参数定义的时间内如果访问次数低于open_file_cache_min_uses定义的次数,则从缓存中删除。
open_file_cache 默认是off

设置文件访问次数
open_file_cache_min_uses

设置检查缓存文件是否最新的周期
open_file_cache_valid 3m;表示3分钟检查一次

设置搜索一个文件时是否缓存错误信息
open_file_cache_errors 默认是off

设置一个或多个dns服务,nginx会采用轮询的方式去访问dns服务,nginx会缓存dns对域名解析的结果,缓存的时间由valid指定,ipv6用于显示开启或者关闭ipv6。
resolver 默认不设置

设置dns解析超时时间
resolver_timeout 默认30s

http模块中的server模块

设置监听的ip地址和端口或可以接受通信的unix域套接字路径,可以指定地址和端口或只指定地址或只指定端口,地址也可以是主机名。
如果只给出地址,默认使用80端口。如果没有配置该指定,且运行nginx程序时使用的是超级管理员权限是则默认使用 :80;否则使用:8000。
default_server 设置默认服务器 地址:端口 如果没有配置该指令则 以配置了 地址:端口的服务器为默认服务器。
ssl 设置服务器wei为HTTPS服务器,但需要指定服务器的证书和私钥位置。
http2 设置是否接受HTTP/2连接请求
spdy 设置是否接受spdy连接请求
proxy_protocol 设置此此端口的所有连接请求都要使用proxy_protocol
其余参数并未全部列出。
*listen :80;
listen [::]:8000;
listen unix:/var/run/nginx.sock;

设置虚拟主机名称,主机名称也就是域名,可配置一个或者多个域名,也可以配置二级域名;也可以使用正则表达式去定义。正则表达式表示字符串开始标记,$表示字符串结束标记。^www表示以www开头
server_name “”;

设置字符集,添加到响应头“Content-Type”属性中
charset koi8-r;

shez设置ssl证书的位置
ssl_certificate

seh设置私钥文件位置
ssl_certificate_key

设置ssl协议版本
ssl_protocols

设置缓存session的方式和大小 off表示禁止缓存session且不可重用,none不缓存session但可重用,builtin在OpenSSL中构建缓存;只能被一个工作进程使用。缓存的大小在会话中指定,如果没有指定大小,默认20480个会话。使用内置缓存会导致内存碎片化。shared缓存session且所有工作进程共享,大小自定义。
ssl_session_cache 默认是none

设置session的重用时间
ssl_session_timeout

设置密码加密方式
ssl_ciphers

设置依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码
ssl_prefer_server_ciphers

Http模块中的upstream模块(定义服务器集群)默认的算法是轮询

upstream的负载均衡方式:轮询、weight、ip_hash、fair、hash 、least_conn
轮询:每个请求按照时间顺序轮流分配到不同的服务器,如果某个服务器停用后,能自动剔除。
weight:根据权重不同分配不同的请求比例,权重和请求比例成正比。
ip_hash:每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个服务器。
fair:根据响应时间来分配请求,响应时间越短,分配的请求越多。
hash:按照访问url或者自定义的key计算hash结果来分配请求,使得每个url定向到同一个服务器。可选consistent关键字支持一致性hash特性
least_conn:请求总会分配到连接最少的服务器,其原理是xian先遍历代理服务器集群,比较每个服务器的 连接数/权重,选取该值最小的服务器,若值相同则使用加权轮询。
least_time:优先分配请求给响应时间最短和活动的连接数(也就是正在传输数据的连接请求)最少的服务器。
random:将请求分配到随机选择的服务器,同时考虑服务器的权重。根据既定的负载均衡方式(默认是least_conn)选择两台服务器,从两台服务器之间如果是权重的负载均衡方式则考虑权重,而默认的是least_conn则考虑响应时间和活动的连接数来从两台服务器中选择。

upstream_name就是代理服务器的统一的名称
设置反向代理服务器集群
server backend1.example.com weight=5;
weight表示权重,权重越大被请求几率越大。默认是1.
backup表示服务器作为备份服务器,当其他服务器无法使用或者负载压力过大的时候,将会启用该服务器传递请求。
down 表示当前服务器已停用
max_fails和fail_timeout一般会搭配一起使用,若在fail_timeout时间内出现了max_fails次连接失败,则停用服务器,max_fails为0,表示不检查连接失败次数。
route设置路由服务器名称
resolve指定当前服务器的域名由既定的dns服务器解析
slow_start设置停用的服务器回复正常的时间或者不正常的服务器回复正常的时间或者权重为0的服务器恢复到正常权重的时间。

upstream upstream_name {
    server backend1.example.com weight=5;
    server 192.169.17.23:8080 max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;
    server backup1.example.com  backup;
}

设置upstream的共享内存空间的名称和大小
zone

负载均衡方式之一
ip_hash

负载均衡方式之一
hash

设置每个工作进程缓存upstream反向代理服务器集群的长连接数量,超过该数量则会剔除使用最少的长连接,不影响工作进程到代理服务器的连接总数。
keepalive 32;

设置一个长连接最多可以接收多少个请求。
keepalive_requests 默认100

设置一个空闲的长连接最多能维持的时间,超过该时间就会被关闭。
keepalive_timeout 默认60s

负载均衡方式之一
least_conn

负载方式之一 header参数表示接收到请求的header的时间作为响应时间,last_byte表示接收完整的请求之后的时间作为响应时间
least_time

设置在请求映射时如果不能选择其中一个代理服务器,则会放入队列中,10表示队列最多可容纳的请求数量,60s表示在该段时间内还是我无法选定服务器,则返回502
queue 10 60s;

负载均衡方式之一 two 选择两个服务器,method上述的集中负载均衡方式其中之一,不包括本身 random
random

server模块的location模块

location指令可以通过正则表达式匹配某类uri或者配置指定的某种uri。
“=” 用于标准的uri前,请求字符串与uri严格匹配;
“~” 表示uri包含正则表达式,并且区分大小写;
“~*” 表示uri包含正则表达式,并且不区分大小写;
“^~” 用于标准uri前,要求nginx找到uri与请求字符串匹配度最高的location之后立即使用次location处理请求,而不用正则的uri再做匹配。

设置代理服务器的url
proxy_pass

添加header属性到请求头当中 一次只能添加一个,可用多行添加多个属性。
proxy_set_header Host h o s t : host: host:server_port;

设置与upstream连接建立之后,如果连续的两个read请求时间间隔超过了该时间且没有从代理服务器读取到数据,则nginx就会断开该连接。如果前一个read请求没有从代理服务器中读取到数据,但是下一个read请求在该段时间内读取到了数据,则重置超时时间的计算。注意不是读取整个代理服务器响应的时间。
proxy_read_timeout

设置与upstream连接建立后,如果连续两个write请求时间间隔超过了该时间且代理服务器没有接收到数据,nginx就会断开该连接。就是如果前一个write请求没有发送数据,但是下一个write请求在该段时间内传输了数据,则重置超时时间的计算。注意不是传输整个请求的时间
proxy_send_timeout

设置nginx与应用服务器的连接超时时间,即nginx发起握手之后等待的超时时间,一般不超过75s,默认是60s
proxy_connect_timeout

设置在什么情况下将请求传递到下一个代理服务器。
error 在建立与代理服务器的连接或传递请求给代理服务器或读取请求的请求头的时候发生错误,则将请求传递给下一个服务器;
timeout 在上述情况出现超时的时候;
invalid_header 当前服务器响应的请求头为空或者不可用的时候;
http_*** *** 用相应的的状态码替换 出现如下的状态的的时候:500、502、503、504、403、404、429;
non_idempotent 表示使用non_idempotent方式的请求不会传递给下一个服务器
off 表示不传递任何类型的请求到下一个服务器
proxy_next_upstream error timeout;

设置从代理服务器读取响应的第一部分数据的缓冲区大小,一般包含了一小部分响应的header
proxy_buffer_size 4k|8k;

设置代理服务器的响应缓冲。
proxy_buffering

设置从代理服务器单个的连接读取响应的缓冲区的数量和大小
proxy_buffers 8 4k|8k;

设置高负荷下的缓冲区大小 一般是proxy_buffer_size两倍
proxy_busy_buffers_size 8k|16k;

在开启了代理服务器的响应的缓冲允许缓存到临时文件的情况下,设置每次向临时文件写入的大小
proxy_temp_file_write_size 8k|16k;

设置上一个指令所述的临时文件的存储路径,存储目最多三层结构
proxy_temp_path

fastcgi开头的指令是关于FastCGI服务器的,是将请求转发给FastCGI服务器,这里暂时不对该指令做说明。
fastcgi_***

限制对某些或者全部代理服务器的访问 或者限制某些请求的访问
deny all;

允许f访问某些或全部服务器或允许访问某类地址
allow 192.168.1.0/24;

添加指定的header属性到响应头
**add_header Access-Control-Allow-Origin *; **
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;

设置响应头的“Expires”和“Cache-Control”属性,也就是控制客户端缓存静态资源的时间。
指定某个时间;如果设置时间是负数 则“Cache-Control: no-cache”,如果是整数或者是0,则Cache-Control: max-age=t,t就是指令中锁设置的时间单位是秒;
epoch 指定“Expires”的值为 “Thu, 01 Jan 1970 00:00:01 GMT”。
max 指定“Expires”的值为"Thu, 31 Dec 2037 23:55:55 GMT","Cache-Control"的值为10年。
off 不修改“Expires”和"Cache-Control"的值。
expires 1d;客户端静态资源缓存一天后过期
expires @15h30m;当天的15时30分过期

Nginx服务器缓存,即对用户访问过的静态资源。

设置缓存文件存放的路径,该路径需要预先创建好
参数level path下面有几级目录 level=1 表示1级hash目录 level=1:2表示2级hash目录
参数keys_zone 缓存的名字和初始大小
参数inactive 强制更新时间,zai在该段时间内没有被访问,就删除缓存
参数max_size 设置最大的缓存空间
proxy_cache_path 某个路径

设置当前的虚拟服务器使用的缓存(即上述定义的缓存名)
proxy_cache

下述的第一条指令表示状态码是200和302的响应的静态资源缓存24小时;第二条指令是状态码是301的响应的静态资源缓存30天;其他的缓存5分钟。
proxy_cache_valid 200 302 24h;
proxy_cache_valid 301 30d;
proxy_cache_valid any 5m;

设置替换请求路径,只能用于http中的location模块
alias

location ^~ /t/ { 
 alias /www/root/html/new_t/;  
}

若请求/t/img.png则会返回 /www/root/html/new_t/img.png文件 会替换掉/t/

设置限制HTTP某种类型METHOD的访问,可以是GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, or PATCH。默认不设置。
limit_except

参考文献:

做一下记录,方便查阅

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值