导图社区 Nginx配置详解
Nginx配置详解,偏向于应用和配置,作为普通开发人员,底层原理无需太多关注。Nginx 可以在大多数UnixLinux OS 上编译运行,并有Windows移植版。
编辑于2021-06-21 16:53:26Nginx
配置文件
https://blog.csdn.net/WanJiaBaoBao/article/details/83349622 #工作进程数,建议设置为CPU的总核数 worker_processes 16; #全局错误日志定义类型,日志等级从低到高依次为: #debug | info | notice | warn | error | crit error_log logs/error.log info; #记录主进程ID的文件 pid /nginx-1.13.7/nginx.pid; #一个进程能打开的文件描述符最大值,理论上该值因该是最多能打开的文件数除以进程数。 #但是由于nginx负载并不是完全均衡的,所以这个值最好等于最多能打开的文件数。 #LINUX系统可以执行 sysctl -a | grep fs.file 可以看到linux文件描述符。 worker_rlimit_nofile 65535; events { #连接数上限,单个进程允许的最大连接数 worker_connections 65535; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #access log 记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息 access_log logs/access.log main; #服务器名字的hash表大小 server_names_hash_bucket_size 128; #客户端请求头缓冲大小。 #nginx默认会用client_header_buffer_size这个buffer来读取header值, #如果header过大,它会使用large_client_header_buffers来读取。 #如果设置过小HTTP头/Cookie过大 会报400 错误 nginx 400 bad request #如果超过buffer,就会报HTTP 414错误(URI Too Long) #nginx接受最长的HTTP头部大小必须比其中一个buffer大 #否则就会报400的HTTP错误(Bad Request) client_header_buffer_size 32k; large_client_header_buffers 4 32k; #客户端请求体的大小 client_body_buffer_size 8m; #隐藏ngnix版本号 server_tokens off; #忽略不合法的请求头 ignore_invalid_headers on; #指定启用除第一条error_page指令以外其他的error_page。 recursive_error_pages on; #让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名 server_name_in_redirect off; #开启文件传输,一般应用都应设置为on;若是有下载的应用,则可以设置成off来平衡网络I/O和磁盘的I/O来降低系统负载 sendfile on; #告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。 tcp_nopush on; #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性, #这样发送一小块数据信息时就不能立即得到返回值。 tcp_nodelay on; #长连接超时时间,单位是秒 keepalive_timeout 65; #gzip模块设置,使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度。 gzip on; #开启gzip gzip_min_length 1k; #最小压缩大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.0; #压缩版本 gzip_comp_level 2; #压缩等级 gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; #压缩类型 #upstream作负载均衡,在此配置需要轮询的服务器地址和端口号 #max_fails为允许请求失败的次数,默认为1. #weight为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率。 #指定要域名对应的WEB项目访问地址 upstream nginx.www.test.cn { server localhost:3000 max_fails=3 weight=1; } #主机配置 server { #监听端口 listen 90; #自己指定要跳转的域名(也可为主机地址) server_name 192.168.1.19; #反向代理配置, #将所有请求为http://nginx.www.test.cn的请求全部转发到upstream中定义的目标服务器中。 location / { #定义首页索引文件的名称 #index index.php index.html index.htm; #此处配置的域名必须与upstream的域名一致,才能转发。 proxy_pass http://nginx.www.test.cn; #以下是一些反向代理的配置可删除 proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #client_max_body_size 10m; #允许客户端请求的最大单文件字节数 #client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 #proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时) #proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时) #proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时) #proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 #proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 #proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) #proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传 } #单独的access_log文件 access_log logs/192.168.1.19.access.log main; #设定查看Nginx状态的地址 location /NginxStatus{ stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file htpasswd; } #禁止访问 .htxxx 文件 location ~ /\.ht { deny all; } #字符集 charset utf-8; #错误页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } }
main
配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日至存放路径,配置文件引入,允许生成worker process数等
daemon
daemon {on|off}; //是否已守护进程运行进程nginx,调试时应设置为off
user
指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行 user USERNSME {GROUPNAME}; //指定运行worker进程的用户和组
master_process
master_process {on|off}; //是否以master/worker模型来运行nginx,调试时可以设置为off
woker_processes
在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。
worker_cpu_affinity
作用:将进程绑定到某个CPU中,避免频繁刷新缓存 在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。
worker_rlimit_nofile
设置所有worker进程最大可以打开的文件数,默认为1024;可以限制为操作系统最大的限制65535
error_log
用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。 error_log 位置1 级别2; //配置错误日志(位置与级别有以下选项,点击脚注)
pid
用来指定进程pid的存储文件位置用来指定进程pid的存储文件位置
time_resolution
time_resolution INTERVAL; //计时器解析度。降低此值,可减少gettimeofday()系统调用的次数time_resolution INTERVAL; //计时器解析度。降低此值,可减少gettimeofday()系统调用的次数
worker_priority
worker_priority NUMBER; //指明worker进程的NICE值(优先级)worker_priority NUMBER; //指明worker进程的NICE值(优先级)
events
配置影响nginx服务器与用户的网络连接,有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等配置影响nginx服务器与用户的网络连接,有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网络连接,开启多个网络连接序列化等
worker_connections
每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。
use
在Linux操作系统下,nginx默认使用epoll事件模型 事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选 建议值: 不配置在Linux操作系统下,nginx默认使用epoll事件模型 事件模块指令,用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选 建议值: 不配置
accept_mutex
master调度用户请求至各worker进程时使用的负载均衡锁,“on”表示能让多个worker轮流地、序列化地去响应新请求;设置网络连接序列化,防止惊群现象发生。默认为onmaster调度用户请求至各worker进程时使用的负载均衡锁,“on”表示能让多个worker轮流地、序列化地去响应新请求;设置网络连接序列化,防止惊群现象发生。默认为on
multi_accept
是否尽可能多的接受请求,默认为off 建议值: on是否尽可能多的接受请求,默认为off 建议值: on
lock_file
lock_file FILE; //accept_nutex用到的互斥锁锁文件路径lock_file FILE; //accept_nutex用到的互斥锁锁文件路径
http
可以嵌套多个server,配置代理,缓存,日之定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。可以嵌套多个server,配置代理,缓存,日之定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
include
文件扩展名与文件类型映射表 实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。文件扩展名与文件类型映射表 实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。
server
配置虚拟主机的相关参数,一个http中可以有多个server 当有多个server时,匹配顺序如下: 1.先做精确匹配检查; 2.左侧通配符匹配检查,如*.idfsoft.com 3.右侧通配符匹配检查,如mail.* 4.正则表达式匹配检查,如~ ^.*\.idfsoft\.com$ 5.default_server server{ listen 80; server_name 192.168.8.18 cszhi.com; index index.html index.htm index.php; root /wwwroot/www.cszhi.com charset gb2312; access_log logs/www.ixdba.net.access.log main;
listen
监听端口监听端口
server_name
监听地址 支持多种形式 server_name example.com www.example.com server_name example.com *.example.com www.example.* server_name .example.com; server_name www.example.com ~^www\d+\.example\.com$监听地址 支持多种形式 server_name example.com www.example.com server_name example.com *.example.com www.example.* server_name .example.com; server_name www.example.com ~^www\d+\.example\.com$
charset
用于 设置网页的默认编码格式用于 设置网页的默认编码格式
access_log
用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。
error_page
keepalive_requests
单连接请求上限次数单连接请求上限次数
index
设置默认页设置默认页
deny
拒绝的IP拒绝的IP
allow
允许的IP
root
用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径
location
配置请求的路由以及各种页面的处理情况 URL部分解释:URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。 以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。配置请求的路由以及各种页面的处理情况 URL部分解释:URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。 以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。
URL详解
Location区段匹配示例 location = / { # 只匹配 / 的查询. [ configuration A ] } location / { # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。 [ configuration C ] } location ~* \.(gif|jpg|jpeg)$ { # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在Configuration C中处 理。 [ configuration D ] } 各 请求的处理如下例: ■/ → configuration A ■/documents/document.html → configuration B ■/images/1.gif → configuration C ■/documents/1.jpg → configuration DLocation区段匹配示例
无修饰符
必须以指定模式开始 如: server { server_name baidu.com; location /abc { …… } } 可匹配 http://baidu.com/abc http://baidu.com/abc?p1 http://baidu.com/abc/ http://baidu.com/abcde 必须以指定模式开始 如: server { server_name baidu.com; location /abc { …… } } 可匹配 http://baidu.com/abc http://baidu.com/abc?p1 http://baidu.com/abc/ http://baidu.com/abcde
=
必须与指定的模式精确匹配 server { server_name sish location = /abc { …… } } 匹配 http://baidu.com/abc http://baidu.com/abc?p1 不匹配 http://baidu.com/abc/ http://baidu.com/abcde必须与指定的模式精确匹配 server { server_name sish location = /abc { …… } } 匹配 http://baidu.com/abc http://baidu.com/abc?p1 不匹配 http://baidu.com/abc/ http://baidu.com/abcde
~
指定的正则表达式要区分大小写、 server { server_name baidu.com; location ~ ^/abc$ { …… } } 匹配 http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 不匹配: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde指定的正则表达式要区分大小写、 server { server_name baidu.com; location ~ ^/abc$ { …… } } 匹配 http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 不匹配: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde
~*
指定的正则表达式不区分大小写 匹配: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 不匹配: http://baidu..com/abc/ http://baidu..com/abcde指定的正则表达式不区分大小写 匹配: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 不匹配: http://baidu..com/abc/ http://baidu..com/abcde
^~
类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。 类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。
@
定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请 求来访问,如try_files或error_page等定义命名location区段,这些区段客户段不能访问,只可以由内部产生的请 求来访问,如try_files或error_page等
rewrite
重新路由重新路由
break
location /login { rewrite ^/ /demo.html break; root home/; } 如果location /login匹配成功,则直接在home路径中查找demo.html文件,然后跳转到demo.html。注意这是内部跳转,浏览器上的地址url不会变,还是以/login结尾 注意:中止Rewrite,不在继续匹配,一旦此rewrite规则重写完成后,有useragent对新的URL重新发起请求,且不会再被当前location内的任何rewrite规则所检查location /login { rewrite ^/ /demo.html break; root home/; } 如果location /login匹配成功,则直接在home路径中查找demo.html文件,然后跳转到demo.html。注意这是内部跳转,浏览器上的地址url不会变,还是以/login结尾 注意:中止Rewrite,不在继续匹配,一旦此rewrite规则重写完成后,有useragent对新的URL重新发起请求,且不会再被当前location内的任何rewrite规则所检查
redirect
作用:已临时重定向的http状态302返回新的URL location /login { rewrite ^/ /demo.html redirect; root home/; } 和break差不多,不过这个表示外部跳转,也会跳转到demo.html页面,不过浏览器地址会自动变成demo.html作用:已临时重定向的http状态302返回新的URL location /login { rewrite ^/ /demo.html redirect; root home/; } 和break差不多,不过这个表示外部跳转,也会跳转到demo.html页面,不过浏览器地址会自动变成demo.html
permanent
以永久从定向的http状态301返回新的URl以永久从定向的http状态301返回新的URl
last
location /login { rewrite ^/ /demo.html last; root home/; } location /demo.html { rewrite ^/ /demo.html break; root home/; } 如果是last修饰的话,nginx会将/demo.html地址和其他location的地址进行匹配,然后找到匹配的地址,继续执行下去。这里他会执行到 /demo.html 的location中,然后内部跳转到/demo.html页面 基本上都用这个FLAG,表示当前的匹配结束,继续下一个匹配,最多匹配10到20个,一旦此rewrite规则重写完成后,就不会再被后面的其他rewrite规则进行处理,而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程location /login { rewrite ^/ /demo.html last; root home/; } location /demo.html { rewrite ^/ /demo.html break; root home/; } 如果是last修饰的话,nginx会将/demo.html地址和其他location的地址进行匹配,然后找到匹配的地址,继续执行下去。这里他会执行到 /demo.html 的location中,然后内部跳转到/demo.html页面 基本上都用这个FLAG,表示当前的匹配结束,继续下一个匹配,最多匹配10到20个,一旦此rewrite规则重写完成后,就不会再被后面的其他rewrite规则进行处理,而是由UserAgent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程
无修饰
location /login { rewrite ^/ /demo.html ; root home/; } 当没有任何修饰的情况下,匹配中location后,不会停止,会继续向下面的location继续匹配下去。知道匹配到最后一个,使用最后一个匹配到的location /login { rewrite ^/ /demo.html ; root home/; } 当没有任何修饰的情况下,匹配中location后,不会停止,会继续向下面的location继续匹配下去。知道匹配到最后一个,使用最后一个匹配到的
root
index
#定义首页索引文件的名称 #index index.php index.html index.htm;#定义首页索引文件的名称 #index index.php index.html index.htm;
expires
定静态文件的过期时间定静态文件的过期时间
proxy
在location的下级,此处为了分类在location的下级,此处为了分类
反向代理相关
#以下是一些反向代理的配置可删除 proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #client_max_body_size 10m; #允许客户端请求的最大单文件字节数 #client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 #proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时) #proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时) #proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时) #proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 #proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 #proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) #proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传#以下是一些反向代理的配置可删除 proxy_redirect off; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #client_max_body_size 10m; #允许客户端请求的最大单文件字节数 #client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数 #proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时) #proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时) #proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时) #proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 #proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 #proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) #proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
proxy_pass
#此处配置的域名必须与upstream的域名一致,才能转发。 server { server_name baidu.com; location /abc { proxy_pass http://nginx.mote.cool; } } 写法: 1、proxy_pass http://backend 请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。 特别注意: 1、proxy_pass 的值后边加/和不加是不一样的, 加上:表示仅把/abc后的uri部分传给http://nginx.mote.cool,如:请求地址为http://localhost/abc/test,则转发后的实际地址为http://nginx.mote.cool/test 不加:则包含/abc部分。如:请求地址为http://localhost/abc/test,则转发后的实际地址为http://nginx.mote.cool/abc/test 2、斜杠这个东西只在ip+端口紧跟着后面才有这种坑。如果端口后面还有路径,则斜杠关闭不关闭问题不大#此处配置的域名必须与upstream的域名一致,才能转发。 server { server_name baidu.com; location /abc { proxy_pass http://nginx.mote.cool; } } 写法: 1、proxy_pass http://backend 请求转向backend定义的服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。 特别注意: 1、proxy_pass 的值后边加/和不加是不一样的, 加上:表示仅把/abc后的uri部分传给http://nginx.mote.cool,如:请求地址为http://localhost/abc/test,则转发后的实际地址为http://nginx.mote.cool/test 不加:则包含/abc部分。如:请求地址为http://localhost/abc/test,则转发后的实际地址为http://nginx.mote.cool/abc/test 2、斜杠这个东西只在ip+端口紧跟着后面才有这种坑。如果端口后面还有路径,则斜杠关闭不关闭问题不大
proxy_redirect
proxy_set_header
后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_next_upstream
proxy_connect_timeout
proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时)proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout
proxy_read_timeout 60 连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)proxy_read_timeout 60 连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)
proxy_buffer_size
proxy_buffer_size 4k 设置代理服务器(nginx)从后端realserver读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点
proxy_buffers
proxy_buffers 4 32k proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size
proxy_busy_buffers_size 64k 高负荷下缓冲大小(proxy_buffers*2)
proxy_max_temp_file_size
proxy_max_temp_file_size 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。proxy_max_temp_file_size 当 proxy_buffers 放不下后端服务器的响应内容时,会将一部分保存到硬盘的临时文件中,这个值用来设置最大临时文件大小,默认1024M,它与 proxy_cache 没有关系。大于这个值,将从upstream服务器传回。设置为0禁用。
proxy_temp_file_write_size
proxy_temp_file_write_size 64k 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。proxy_temp_file_write_size 64k 当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。
alias
若按照下述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件 location /img/ { alias /var/www/image/; } alias是一个目录别名的定义,root则是最上层目录的定义。 还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无若按照下述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件 location /img/ { alias /var/www/image/; } alias是一个目录别名的定义,root则是最上层目录的定义。 还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无
fastcgi_pass
fastcgi_index
fastcgi_param
allow
allow:设定允许那台或那些主机访问,多个参数间用空格隔开,也可多条 location / { root html; index index.php index.html index.htm; allow 192.168.91.13 192.168.91.14 allow 192.168.91.129/32; deny all; } allow:设定允许那台或那些主机访问,多个参数间用空格隔开,也可多条 location / { root html; index index.php index.html index.htm; allow 192.168.91.13 192.168.91.14 allow 192.168.91.129/32; deny all; }
deny
deny:设定禁止那台或那些主机访问,多个参数间用空格隔开 location / { root html; index index.php index.html index.htm; allow 192.168.91.129/32; deny all; } deny:设定禁止那台或那些主机访问,多个参数间用空格隔开 location / { root html; index index.php index.html index.htm; allow 192.168.91.129/32; deny all; }
auth_basic
auth_basic_user_file
概要
*注:用于location段,必须一起用 auth_basic “欢迎信息”; auth_basic_user_file FILE_PATH4;*注:用于location段,必须一起用 auth_basic “欢迎信息”; auth_basic_user_file FILE_PATH4;
NginxStatus
#设定查看Nginx状态的地址 location /NginxStatus{ stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file htpasswd; }
SSL配置
upstream
#upstream作负载均衡,在此配置需要轮询的服务器地址和端口号 #max_fails为允许请求失败的次数,默认为1. #weight为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率。 #指定要域名对应的WEB项目访问地址 upstream nginx.www.test.cn { server localhost:3000 max_fails=3 weight=1; } upstream backend { #负载均衡策略 ip_hash; server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; server backup1.example.com:8080 backup; }#upstream作负载均衡,在此配置需要轮询的服务器地址和端口号 #max_fails为允许请求失败的次数,默认为1. #weight为轮询权重,根据不同的权重分配可以用来平衡服务器的访问率。 #指定要域名对应的WEB项目访问地址 upstream nginx.www.test.cn { server localhost:3000 max_fails=3 weight=1; } upstream backend { #负载均衡策略 ip_hash; server backend1.example.com weight=5; server 127.0.0.1:8080 max_fails=3 fail_timeout=30s; server unix:/tmp/backend3; server backup1.example.com:8080 backup; }
server
max_fails
失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060 max_fails=1 fail_timeout=10s; server 10.0.0.11:7070 backup; }失败多少次 认为主机已挂掉则,踢出,公司资源少的话一般设置2~3次,多的话设置1次 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060 max_fails=1 fail_timeout=10s; server 10.0.0.11:7070 backup; }
fail_timeout
max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复。 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060 max_fails=1 fail_timeout=10s; server 10.0.0.11:7070 backup; }max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次,认为该应用宕机,后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,如果还是失败,则继续等待30秒...以此循环,直到恢复。 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060 max_fails=1 fail_timeout=10s; server 10.0.0.11:7070 backup; }
max_conns
可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800 upstream server_qd{ server 127.0.0.1:8072 weight=2 max_conns=800 ; server 127.0.0.1:8096 weight=4; }可以根据服务的好坏来设置最大连接数,防止挂掉,比如1000,我们可以设置800 upstream server_qd{ server 127.0.0.1:8072 weight=2 max_conns=800 ; server 127.0.0.1:8096 weight=4; }
backup
备用服务:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }备用服务:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。 upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }
slow_start
当节点恢复,不立即加入当节点恢复,不立即加入
down
表示单前的server暂时不参与负载. upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }表示单前的server暂时不参与负载. upstream bakend{ #定义负载均衡设备的Ip及设备状态 ip_hash; server 10.0.0.11:9090 down; server 10.0.0.11:8080 weight=2; server 10.0.0.11:6060; server 10.0.0.11:7070 backup; }
负载均衡算法
轮询(默认)
upstream linuxidc { server 10.0.6.108:7080; server 10.0.0.85:8980; }upstream linuxidc { server 10.0.6.108:7080; server 10.0.0.85:8980; }
weight
权重轮询 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况 upstream linuxidc{ server 10.0.0.77 weight=5; server 10.0.0.88 weight=10; }权重轮询 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况 upstream linuxidc{ server 10.0.0.77 weight=5; server 10.0.0.88 weight=10; }
ip_hash
每一个请求按訪问ip的hash结果分配 upstream favresin{ ip_hash; server 10.0.0.10:8080; server 10.0.0.11:8080; }每一个请求按訪问ip的hash结果分配 upstream favresin{ ip_hash; server 10.0.0.10:8080; server 10.0.0.11:8080; }
url_hash
目前用consistent_hash替代url_hash与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。 hash_method是使用的hash算法 upstream resinserver{ server 10.0.0.10:7777; server 10.0.0.11:8888; hash $request_uri; hash_method crc32; }目前用consistent_hash替代url_hash与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。 hash_method是使用的hash算法 upstream resinserver{ server 10.0.0.10:7777; server 10.0.0.11:8888; hash $request_uri; hash_method crc32; }
least_conn
least_time
fair
按后端服务器的响应时间来分配请求。响应时间短的优先分配 upstream favresin{ server 10.0.0.10:8080; server 10.0.0.11:8080; fair; }按后端服务器的响应时间来分配请求。响应时间短的优先分配 upstream favresin{ server 10.0.0.10:8080; server 10.0.0.11:8080; fair; }
default_type
设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口
keepalive_timeout
keepalive_timeout 65 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。keepalive_timeout 65 长连接超时时间,单位是秒,这个参数很敏感,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置,可以另外起一片文章了。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
sendfile
sendfile on 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。sendfile on 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
tcp_nopush
access_log
log_format
gzip
server_names_hash_bucket_size
#服务器名字的hash表大小 server_names_hash_bucket_size 128;
client_header_buffer_size
large_client_header_buffers
client_body_buffer_size
#客户端请求体的大小 client_body_buffer_size 8m;
server_tokens
#隐藏ngnix版本号 server_tokens off;#隐藏ngnix版本号 server_tokens off;
ignore_invalid_headers
#忽略不合法的请求头 ignore_invalid_headers on;
recursive_error_pages
#指定启用除第一条error_page指令以外其他的error_page。 recursive_error_pages on;
server_name_in_redirect
#让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名 server_name_in_redirect off;
tcp_nopush
#告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。 tcp_nopush on;#告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。 tcp_nopush on;
tcp_nodelay
#告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性, #这样发送一小块数据信息时就不能立即得到返回值。 tcp_nodelay on;#告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性, #这样发送一小块数据信息时就不能立即得到返回值。 tcp_nodelay on;
http_gzip
在http的下一级,这里只是为了分类在http的下一级,这里只是为了分类
gzip
#gzip模块设置,使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度。 gzip on; #开启gzip#gzip模块设置,使用 gzip 压缩可以降低网站带宽消耗,同时提升访问速度。 gzip on; #开启gzip
gzip_min_length
gzip_min_length 1k; #最小压缩大小 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。gzip_min_length 1k; #最小压缩大小 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers
gzip_buffers 4 16k; #压缩缓冲区 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。gzip_buffers 4 16k; #压缩缓冲区 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_http_version
gzip_http_version 1.0; #压缩版本 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。gzip_http_version 1.0; #压缩版本 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。
gzip_comp_level
gzip_comp_level 2; #压缩等级 gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)gzip_comp_level 2; #压缩等级 gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)
gzip_types
gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; #压缩类型 匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。gzip_types text/plain text/css text/xml text/javascript application/json application/x-javascript application/xml application/xml+rss; #压缩类型 匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。
gzip_proxied
gzip_proxied any Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。gzip_proxied any Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
gzip_vary
gzip_vary on 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。gzip_vary on 和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。
send_timeout
client_max_body_size
client_body_buffer_size
常用配置项
$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址; $remote_user :用来记录客户端用户名称; $time_local : 用来记录访问时间与时区; $request : 用来记录请求的url与http协议; $status : 用来记录请求状态;成功是200; $body_bytes_s ent :记录发送给客户端文件主体内容大小; $http_referer :用来记录从那个页面链接访问过来的; $http_user_agent :记录客户端浏览器的相关信息;$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址; $remote_user :用来记录客户端用户名称; $time_local : 用来记录访问时间与时区; $request : 用来记录请求的url与http协议; $status : 用来记录请求状态;成功是200; $body_bytes_s ent :记录发送给客户端文件主体内容大小; $http_referer :用来记录从那个页面链接访问过来的; $http_user_agent :记录客户端浏览器的相关信息;
运维
安装
docker
docker run -d -p 80:80 -v /etc/mote/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/mote/nginx/server/:/etc/nginx/conf.d/ -v /usr/share/mote/nginx/:/usr/share/nginx/ --name nginx-motedocker run -d -p 80:80 -v /etc/mote/nginx/nginx.conf:/etc/nginx/nginx.conf -v /etc/mote/nginx/server/:/etc/nginx/conf.d/ -v /usr/share/mote/nginx/:/usr/share/nginx/ --name nginx-mote
https配置
开启状态界面
配置如下 location /status { ##URI不唯一 stub_status on; allow 192.168.91.129/32; ##允许查看的地址 deny all; } 访问状态页面方式:http://服务器IP/status配置如下 location /status { ##URI不唯一 stub_status on; allow 192.168.91.129/32; ##允许查看的地址 deny all; } 访问状态页面方式:http://服务器IP/status
使用场景
正向代理
反向代理
Web服务
负载均衡
内置策略
内置策略为轮询,加权轮询,Ip hash内置策略为轮询,加权轮询,Ip hash
扩展策略