低头凝望镜中月
不如关注木丘白
一步两步向前走
共同学习一起来
开篇先附上Nginx中文文档地址:https://www.nginx.cn/doc/index.html
文档包含了Nginx的很多内容介绍,包括各系统如何安装配置等。本篇主要讲解nginx.conf配置文件项管内容。
nginx.conf
#使用的用户和用户组
user www www;
#指定工作衍生进程数,建议设置为等于CPU总核心数。
worker_processes 8;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /usr/local/nginx/logs/error.log info;
#指定进程pid存放路径
pid /usr/local/nginx/logs/nginx.pid;
#进程最大打开文件数,如果太小就可能会有too many open files问题
worker_rlimit_nofile 65535;
这里注意worker_rlimit_nofile的设置,在服务器上使用命令ulimit -n可以查看linux服务器自身的最大打开文件数,如果worker_rlimit_nofile值超过了服务器本身的最大值是没用的,所以这里如果没有必要的限制,就可以设置成和ulimit -n 值一样。
附带说明一下ulimit命令的几个参数以及含义
参数:
-a 显示目前资源限制的设定。
-c 设定core文件的最大值,单位为区块。
-d 程序数据节区的最大值,单位为KB。
-f shell所能建立的最大文件,单位为区块。
-H 设定资源的硬性限制,也就是管理员所设下的限制。
-m 指定可使用内存的上限,单位为KB。
-n 指定同一时间最多可开启的文件数。
-p 指定管道缓冲区的大小,单位512字节。
-s 指定堆叠的上限,单位为KB。
-S 设定资源的弹性限制。
-t 指定CPU使用时间的上限,单位为秒。
-u 用户最多可开启的程序数目。
-v 指定可使用的虚拟内存上限,单位为KB。
events
events有以下这些配置
events{
use epoll;
#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;
#keepalive超时时间。
keepalive_timeout 60;
#客户端请求头部的缓冲区大小,这里可以设置为系统分页大小
#系统分页大小可以通过getconf PAGESIZE获取
client_header_buffer_size 4k;
#这个将为打开文件指定缓存,默认是没有启用的
#max指定缓存数量,建议和打开文件数worker_rlimit_nofile一致
#inactive是指经过多长时间文件没被请求后删除缓存
open_file_cache max=65535 inactive=60s;
#这个是指多长时间检查一次缓存的有效信息
#如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_valid 60s;
#open_file_cache指令中的inactive参数时间内文件的最少使用次数
#如果超过这个数字,文件描述符一直是在缓存中打开的
#如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_min_uses 1;
}
首先查看一下服务器版本信息
cat /proc/version
Linux version 2.6.32-642.el6.x86_64 (mockbuild@x86-033.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) ) #1 SMP Wed Apr 13 00:51:26 EDT 2016
#参考事件模型
use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]
与Apache相似,Nginx针对不同的系统,有不同的事件模型,这里主要分两种事件模型,标准事件模型和高效事件模型。
为什么要看服务器版本信息,就是因为与事件模型的选用有关,这里我使用的是epoll。
http
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#默认编码
#charset utf-8;
#是否允许在header的字段中带下划线
underscores_in_headers on;
#服务器名字的hash表大小
server_names_hash_bucket_size 128;
#客户请求头缓冲大小,默认使用client_header_buffer_size
#如果header值过大,则会使用large_client_header_buffers
large_client_header_buffers 464k;
#设定通过nginx上传文件的大小
client_max_body_size 8m;
#开启高效文件传输模式
sendfile on;
#此选项允许或禁止使用socke的TCP_CORK的选项
#此选项仅在使用sendfile的时候使用
tcp_nopush on;
#是否开启延迟发送,与tcp_nopush互斥使用
tcp_nodelay on;
#开启目录列表访问,合适下载服务器,默认关闭。
autoindex on;
#长连接超时时间,单位是秒
keepalive_timeout 120;
#客户端向服务端发送一个完整的 request header 的超时时间
client_header_timeout 3m;
#指定客户端与服务端建立连接后发送 request body 的超时时间
client_body_timeout 3m;
#服务端向客户端传输数据的超时时间
send_timeout 3m;
#隐藏Nginx版本号,防止通过版本找到漏洞攻击
server_tokens off;
}
server
server {
#监听端口
listen 80;
#服务器名,可以根据IP、域名、正则表达式配置
server_name localhost;
#定义网站的字符集,一般不设置,通过代码设置
#charset koi8-r;
#定义访问日志,可以针对每一个server(即每一个站点)设置它们自己的访问日志
#access_log logs/host.access.log main;
#当状态码为500、502、503、504时,则访问50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
#定义50x.html所在路径
root html;
}
}
location
location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效。
location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,表示前缀匹配。
location / 通用匹配,任何未匹配到其他location的请求都会匹配到。
location / {
#代理转发
proxy_pass http://127.0.0.1:100;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Request-Url $request_uri;
proxy_redirect http:// $scheme://;
}
upstream
upstream这里有5种配置分配方式,逐一讲解
①轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。
upstream qbnever.com.cn {
server 192.168.110.101:8088;
server 192.168.110.102:8088;
server 192.168.110.103:8088;
}
②weight
加权轮询,weight值越高,被访问的几率越大,同样服务器down掉后自动剔除。
upstream qbnever.com.cn {
server 192.168.110.101:8088 weight=1;
server 192.168.110.102:8088 weight=2;
server 192.168.110.103:8088 weight=3;
}
③ip_hash
每个请求按照访问ip的hash值进行分配,由于同一算法的hash值不会变,所以每个ip会固定访问某台服务器,这样可以解决session一致问题。
upstream qbnever.com.cn {
ip_hash;
server 192.168.110.101:8088;
server 192.168.110.102:8088;
server 192.168.110.103:8088;
}
④fair
fair公平模式,根据服务端的响应时间分配,响应时间越短被分配的概率越高。
upstream qbnever.com.cn {
server 192.168.110.101:8088;
server 192.168.110.102:8088;
server 192.168.110.103:8088;
fair;
}
⑤url_hash
url_hash与ip_hash类似,根据url计算的hash值分配,这样每个url会固定访问到对应的服务器,这种配置更适用于缓存服务器。hash_method用来指定使用的hash算法。
upstream qbnever.com.cn {
server 192.168.110.101:8088;
server 192.168.110.102:8088;
server 192.168.110.103:8088;
hash $request_uri;
hash_method crc32;
}
服务状态
服务状态有以下几种
down:表示服务停用
weight:权重,在上面upstream中已经提到
fail_timeout:与max_fail关联使用,默认是10s,表示在10秒内如果失败次数已达max_fail值,则在fail_timeout时间内部在访问此服务器。
max_fail:默认值1
back_up:备用服务,只有当其他非备用服务全部挂掉之后才会请求到此服务。