1.Nginx配置
NGINX配置文件主要包括全局配置、HTTP配置、STREAM配置等内容,具体配置结构如下:
配置类型 |
说明 |
全局配置 |
必须存在 |
STREAM模块 |
按需配置 |
UPSTREAM配置 |
使用STREAM时,按需配置 |
SERVER配置 |
使用STREAM时,必须配置 |
HTTP模块 |
按需配置 |
HTTP基础配置 |
使用HTTP模块,必须配置 |
UPSTREAM配置 |
使用HTTP模块,按需配置 |
SERVER配置 |
使用HTTP模块,必须配置 |
LOCATION配置 |
使用HTTP模块,必须配置 |
2.全局配置参数与说明
参数 |
参数值 |
参数说明 |
user |
nginx |
配置用户或者组 |
work_processes |
auto |
允许生成的进程数 |
worker_cpu_affinity |
auto |
充分利用多核CPU、CPU是任务处理,当计算最费是或资源的时候,CPU核使用上越多越好 |
use |
epoll |
事件驱动模型 |
accept_mutex |
off |
惊群现象一个网络连接到来,多个睡眠的进程被同时叫醒,但只有一个进程能获得链接,这样会影响系统性能 |
multi_accept |
on |
设置一个进程是否同时接受多个网络连接 |
worker_connection |
10240 |
最大连接数 |
stream |
按需加载(include)stream模块配置文件 |
|
http |
按需加载(include)http模块配置文件 |
3.Stream模块配置参数与说明
3.1. RESOLVER部分
当使用域名地址访问NGINX后段服务器地址时,必须添加如下如下DNS解析参数:
参数 |
参数值 |
参数说明 |
address |
DNS地址 |
配置进行stream内配置域名地址解析的DNS域名信息。 |
valid |
10s |
覆盖DNS的TTL属性 |
ipv6 |
off |
禁止对IPv6的解析 |
3.2.UPSTREAM部分
参数 |
参数值 |
参数说明 |
upstream |
stream_backend01_<PORT> |
配置UPSTREAM名字 |
server |
后端主机/IP:端口 |
定义后段处理请求的服务器和端口 |
server_weight |
实现负载均衡(默认为轮询)中基于权重的策略,服务器访问地址的权重设置 |
|
least_conn |
实现负载均衡(默认为轮询)中基于连接最少的策略,请求会被转发到连接数最少的服务器。 |
|
least_time |
实现负载均衡(默认为轮询)中基于平均响应时间最短的策略。 |
|
max_fails |
2 |
基于连接探测。max_fails设定Nginx与服务器通信的尝试失败的次数(默认为1次),fail_timeout 设置进行失败尝试的单位周期(默认为10s)。 如果发现后端异常,对于同一个节点,在单位周期为中达到max_fails次数,那么将把此节点标识为不可以,等待下一个周期,再一次去请求,判断是连接是否成功,如果成功将恢复之前的轮询方式,如果不可用将在下一个周期再试一次。 |
fail_timeout |
30s |
3.3.SERVER部分
参数 |
参数值 |
说明 |
listen |
<PORT> |
监听端口 |
proxy_pass |
UPSTREAM名称 |
请求转向定义的UPSTREAM |
error_log |
logs/error-tcp.log warn |
配置stream模块的错误日志路径和级别。 |
map |
proxy-tcp-json |
创建自定义变量,以匹配特定的规则,该参数自1.11.2开始提供。 |
access_log |
logs/access-tcp.log |
配置stream模块的访问日志的路径,该参数自1.11.4开始提供。 |
proxy_connect_timeout |
30s |
设置与UPSTREAM中配置的后端服务器建立连接的超时时间,默认60s。 |
proxy_timeout |
10s |
设置在代理到UPSTREAM组中的服务器之一后使用的超时(与后端服务器的数据交互必须在该参数定义的时间内完成)。 |
4.http基础配置
4.1.配置说明
参数 |
参数值 |
说明 |
|
include |
mime.types |
文件扩展名与文件类型映射表 |
|
default_type |
application/octet-stream |
默认文件类型 |
|
log_format |
remote_addr |
$remote_addr与$http_x_forwarded_for 用于记录客户端的IP地址 |
|
http_x_forwarded_for |
|||
bytes_sent |
发送给客户端的总字节数 |
||
time_iso8601 |
时间格式设定 |
||
connection |
连接到序列号 |
||
connection_requests |
当前通过一个链接获得的请求数量 |
||
status |
用来记录请求状态,成功为200 |
||
body_bytes_sent |
记录发送给客户端文件主题内容大小 |
||
request_time |
NGINX收到第一个字节到NGINX把所有响应内容放到TCP发送缓冲区的时间 |
||
http_referer |
用来记录从哪个页面链接访问过来的 |
||
http_user_agent |
记录客户端浏览器的相关信息 |
||
request |
记录请求的URL和HTTP协议 |
||
host |
标识客户端请求头部中的HOST字段信息,如果Host字段不存在,则以实际处理的servername名称代替 |
||
uri |
链接字符 |
||
server_addr |
表示服务器地址 |
||
upstream_addr |
集群中的服务器IP地址 |
||
http |
响应协议 |
||
upstream_response_time |
响应时间 |
||
配置示例 |
log_format access-json '{' '"@timestamp":"$time_iso8601",' '"protocol":"http",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":"$body_bytes_sent",' '"sizeSum":"$bytes_sent",' '"requesttime":"$request_time",' '"upstremtime":"$upstream_response_time",' '"upstremhost":"$upstream_addr",' '"httphost":"$host",' '"referer":"$http_referer",' '"xff":"$http_x_forwarded_for",' '"agent":"$http_user_agent",' '"connection":"$connection",' '"connection_requests":"$connection_requests",' '"request":"$request",' '"uri":"$uri",' '"status":"$status"' '}'; |
||
server_tokens |
off |
隐藏版本号 |
|
sendfile |
on |
允许sendfile方式传输文件 |
|
keepalive_timeout |
15 |
连接超时时间,单位秒 |
|
concat |
on |
开启小文件合并功能 |
|
gzip |
on |
决定是否开启gzip |
|
gzip_vary |
on |
给CDN和代理服务器使用,针对相同URL,可以根据头信息返回压缩和非压缩本副本 |
|
gzip_min_length |
1k |
当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩处理 |
|
gzip_buffers |
4 8k |
设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间 |
|
gzip_comp_level |
1 |
设置gzip压缩等级(1-9),等级越低压缩速度越快文件压缩比月销,反之速度越慢文件压缩比越大 |
|
gzip_type |
text/plain application/x-javascript text/css text/htm |
设置需要压缩的MME类型,非设置值不进行压缩 |
|
gzip_http_version |
1.1 |
用户识别http协议的版本,早起的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项,目前此项基本可以忽略 |
|
proxy_buffering |
off |
这个参数配置在http,server,location,用于开启对呗代理服务器的应答缓存 |
|
proxy_next_upstream |
error timeout http_500 http_502 http_503 http_504 |
当其中一台返回错误码404,500...等错误的时候,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可用户前台程序负载 |
|
proxy_next_upstream_tries |
4 |
1标识负载一台机器,如果超时则返回,不去伦旭其他机器,如果设备为2,则表示当前机器超时或者错误则继续轮询一次 |
|
proxy_read_timeout |
180s |
此指令用户设置从被代理服务器读取应答内容的超时时间 |
|
proxy_send_timeout |
180s |
后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据 |
|
client_max_body_size |
50m |
限制请求体的大小,若超过所设定的大小,返回413错误 |
|
underscores_in_headers |
on |
是否允许在header的字段中待下划线 |
4.2. http模块配置参数与说明
4.2.1.RESOLVER部分
当使用域名地址访问NGINX后段服务器地址时,必须添加如下如下DNS解析参数:
当使用域名地址访问NGINX后段服务器地址时,必须添加如下如下DNS解析参数:
参数 |
参数值 |
参数说明 |
address |
nginxdnsprd01 |
配置进行http内配置域名地址解析的DNS域名信息。统一配置为nginxdnsprd01,并在/etc/hosts下配置该地址与实际域名IP地址的映射关系。 |
valid |
10s |
覆盖DNS的TTL属性 |
ipv6 |
off |
禁止对IPv6的解析 |
4.2.2.UPSTREAM部分
参数 |
参数值 |
参数说明 |
upstream |
http_backend01_<PORT> |
配置UPSTREAM名字 |
server |
后端主机/IP:端口 |
定义后段处理请求的服务器和端口 |
server_weight |
3 |
实现负载均衡(默认为轮询)中基于权重的策略,设置服务器访问地址的权重。 |
ip_hash |
实现负载均衡(默认为轮询)中的客户端IP一致的策略,同一客户端连续的Web请求都会被分发到同一服务器进行处理。 |
|
least_conn |
实现负载均衡(默认为轮询)中基于连接最少的策略,请求会被转发到连接数最少的服务器。 |
|
least_time |
实现负载均衡(默认为轮询)中基于平均响应时间最短的策略。 |
|
sticky |
实现负载均衡(默认为轮询)中基于cookie的策略,通过分发和识别cookie,使同一个客户端的请求落在同一台服务器。 |
|
max_fails |
2 |
基于连接探测。max_fails设定Nginx与服务器通信的尝试失败的次数(默认为1次),fail_timeout 设置进行失败尝试的单位周期(默认为10s)。 如果发现后端异常,对于同一个节点,在单位周期为中达到max_fails次数,那么将把此节点标识为不可以,等待下一个周期,再一次去请求,判断是连接是否成功,如果成功将恢复之前的轮询方式,如果不可用将在下一个周期再试一次。 |
fail_timeout |
30s |
4.2.3.SERVER部分
参数 |
参数值 |
说明 |
listen |
<PORT> |
监听端口 |
location |
/uri/ |
定义根据请求uri的转发规则 |
location |
根据uri路径进行请求转发 |
|
map |
创建自定义变量,以匹配特定的规则。 |
|
error_log |
logs/http_err_<PORT>_$logdate.log warn |
配置http模块的错误日志路径和级别。 |
access_log |
logs/http_access_<PORT>_$logdate.log |
配置stream模块的访问日志的路径。 |
4.2.4.LOCATION部分
Location语法规范为:location [匹配运算符号] uri { … }。
参数 |
参数值 |
说明 |
location |
[运算符] uri |
其中匹配运算符以及优先级关系如下: |
根据以上匹配优先级,从上至下匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。 |
||
root |
path |
配置请求达到后的文件根目录。path可基于nginx安装目录的相对路径,也可设置path为文件系统绝对路径。统一使用绝对路径。uri、path目录后面带不带"/",不会影响访问。 |
location /static/a/ { root /app/nginx/html/; } 请求"/static/a/123/test.html"文件,nginx将转到"/app/nginx/html/static/a/123/test.html"文件。 |
||
alias |
path |
配置uri对应的别名路径。path可基于nginx安装目录的相对路径,也可设置path为文件系统绝对路径。 如 uri 以"/"结束,path必须以"/"结束。 |
location /itsm/ { alias /app/nginx/html/;} 请求"/itsm/456/test.html"将转到:"/app/nginx/html/456/test.html"。 |
||
index |
指定初始首页。如果包括多个文件,Nginx会根据文件的枚举顺序来检查,直到查找的文件存在。 |
|
proxy_pass |
http[s]://ip:port |
配置进行请求的转发。proxy_pass的ip:port之后以"/"结尾只传递后续路径;不以"/"结尾传递完整路径 |
location /bbbb/ { proxy_pass http://127.0.0.1:8888/test/;} 请求"http://ip1:port1/bbbb/a/a/test.html"将转到"http://127.0.0.1:8888/test/a/a/test.html" |
||
rewrite |
regex replacement [flag] |
实现正则匹配上后替换成新的path,以实现url替换。根据flag的不同进行不同的处理,其中redirect和permanent进行外部重定向;beak和last进行内部重定向;其中我们需要注意的是flag可为空,为空则接着往下走直到/break中断/last 中断&& location重匹配 |