NGINX配置项
全局
# 指定用户和用户组 user [user] [group]
user myUser myGroup;
# 工作线程数 number | auto;
worker_processes 4;
# 指定pid文件存放的路径
pid /user/local/nginx/nginx.pid;
# 指定错误日志的路径和日志级别,其中debug级别的日志需要编译时使用--with-debug开启debug开关
# 日志级别:debug|info|notice|warn|error|crit|alert|emerg
error_log logs/error.log debug;
events块
events {
# 设置网路连接序列化,默认on,开启后,会对多个Nginx进程接收连接进行序列化,防止惊群现象
# 当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。
accept_mutex on;
# 一个进程是否同时接受多个网络连接,默认off
multi_accept on;
# 事件驱动模型:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport
use epoll;
# 最大连接数
worker_connections 1024;
}
http块
http基本配置
http {
# include指令:用于包含其他的配置文件 通过mime.types映射,设置Response的Content-Type
include mime.types;
# 默认文件类型:默认为text/plain
default_type application/octet-stream;
# 是否开启服务日志:记录Nginx服务器提供服务过程应答前端请求的日志
access_log off;
# 自定义服务日志格式
log_format myLogFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for';
# 设置日志的格式
access_log log/access.log myLogFormat;
# 是否开启高效文件传输模式
# 指定nginx是否调用 sendfile 函数来输出文件,减少用户空间到内核空间的上下文切换;
# 对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
sendfile on;
# 每个进程每次最大传输值,默认为0,不限制大小
sendfile_max_chunk 100k;
# 长连接超时时间(秒)
# 在请求大量小文件的时候,可以减少重建连接的开销;
# 但如果上传大文件时在设置的超时时间内没上传完成会导致失败,如果设置时间过长,用户又多,长时间保持连接会占用大量资源;
keeplive_timeout 100;
# 单连接请求数上限:限制用户通过某一连接向Nginx服务器发送请求的次数
keepalive_requests 100;
# 响应客户端的超时时间(秒)
send_timeout 75;
# 客户端请求头的区缓冲区大小
client_header_buffer_size 32k;
# 客户端请求头的最大缓冲区数量和大小
large_client_header_buffers 8 32k;
# 允许客户端请求的最大字节数
client_max_body_size 10m;
# 客户端请求体的缓冲区大小
client_body_buffer_size 128k;
}
反向代理
http {
proxy_connect_timeout 90; # nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; # 后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; # 连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; # 从nginx读取并保存用户头信息的缓冲区大小
proxy_buffers 4 32k; # 代理缓冲区数量和大小
proxy_busy_buffers_size 64k; # 高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; # 设定缓存文件夹大小
proxy_set_header Host $host; # 后台可以获取到完整的ip+端口号
proxy_set_header X-Forwarder-For $remote_addr; #后台可以获取到用户访问的真实ip地址
}
http反向代理服务器和负载均衡
http {
upstream product_server {
# 权重,默认为1,权值越高被分配到的几率越大
server 192.168.1.11:8880 weight=5;
# 标识当前的server暂时不参与负载
server 192.168.1.12:9990 down;
# 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
server 192.168.1.13:8989 backup;
# max_fails:允许请求失败的最大次数,默认为1,当超过最大次数时,返回proxy_next_upstream 模块定义的错误.
# fail_timeout: max_fails次失败后,暂停的时间
server 192.168.1.14:8989 max_fails=2 fail_timeout=60s;
}
}
http_gzip配置
http {
gzip on; # 开启gzip压缩
gzip_min_length 1K; # 设置压缩的最小字节数(资源达到该大小才压缩,建议设置成大于1K)
gzip_buffers 4 16k; # 获取多少个单位的缓存用于存储gzip的压缩结果数据流,4 16k表示按照原始数据大小以16k为单位的4倍进行内存申请;
gzip_http_version 1.0; # http协议版本
gzip_comp_level 6; # zip压缩比:为1时,压缩比最小处理速度最快;为9时,压缩比最大但处理速度最慢。
# 设置需要压缩哪些响应类型的资源
gzip_types text/plain text/css application/json;
gzip_proxied any; # 开启或者关闭 后端服务器返回的结果是否压缩
gzip_vray on; # 开启后,可以让前端的缓存服务器缓存经过gzip压缩的页面
}
server相关配置
server基础配置
http {
...
server {
# 1、监听端口:可配置监听ip、端口、ip:端口三种形式
listen 8080;
# 2、监听服务器地址(IP/域名)
server_name 172.27.8.22;
# 3、每个连接请求上限次数
keepalive_requests 120;
# 4、字符集
charset utf-8;
# 5、服务日志所在目录以及日志格式(日志格式可直接引用http配置的日志格式)
access_log logs/host.log myLogFormat;
# 6、错误页
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
}
ssl配置
http {
server {
# SSL 访问端口号为 443
listen 443 ssl;
# 填写绑定证书的域名
server_name ;
# 开启 ssl
ssl on;
# ssl 证书路径
ssl_certificate /opt/ssl/nginx.crt;
# ssl 证书秘钥
ssl_certificate_key /opt/ssl/nginx.key;
# ssl 会话超时时间
ssl_session_timeout 1d;
# ssl 缓存
ssl_session_cache shared:SSL:50m;
# ssl 会话票据
ssl_session_tickets off;
# ssl 协议版本
ssl_protocols TLSv1.2;
# ssl 密码套件
ssl_ciphers 'HIGH:!aNULL:!MD5';
# 开启 ssl 服务密码套件
ssl_prefer_server_ciphers on;
}
}
location配置
http {
server {
# 1、路由匹配规则:location模块监听的url地址,url只有匹配正确才会进入该location块: location [ = | ~ | ~* | ^~ ] uri { ... }
# "=": 用于标准uri前,要求请求字符串与uri严格匹配。
# "^~": 用于标准uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
# "~": 用于表示uri包含正则表达式,并且区分大小写。
# "~*": 用于表示uri包含正则表达式,并且不区分大小写。注意如果uri包含正则表达式,就必须要使用“~”或者“~*”标识。
location 匹配规则 {
# 2、服务器的默认网站根目录位置,root指令:定义服务器的默认网站根目录位置
# 假设请求为/t/a.html
# root /var/www/html; # 会返回/var/www/html/t/a.html的资源
alias /var/www/new_html; # 会返回/var/www/new_html/a.html的资源
# 3、默认访问的文件名
index index.html index.htm index.jsp;
# 4.1、拒绝的 IP
deny 192.168.56.21;
# 4.2、允许的 IP
allow 192.168.56.10;
# 5.1、跨域、请求头配置
add_header Access-Control-Allow-Origin * always;
# 5.2、是否允许信任证书
add_header Access-Control-Allow-Credentials 'true' always;
# 5.3、允许的请求头类型
add_header Access-Control-Allow-Headers * always;
# 5.4、设置允许的请求方式
add_header Access-Control-Allow-Methods 'PUT, GET, POST, DELETE, OPTIONS' always;
# 5.5、处理 OPTIONS 请求
if ($request_method = 'OPTIONS') {
return 204;
}
}
location ~/product{
# 反向代理服务器
proxy_pass http://product_server;
# 是否重定向代理服务器地址
proxy_redirect off;
proxy_set_header Host $host; # 后台可以获取到完整的ip+端口号
proxy_set_header X-Forwarder-For $remote_addr; #后台可以获取到用户访问的真实ip地址
}
}
}