# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535; #所有worker进程允许打开的文件数
worker_priority -20; #优先级
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
use epoll; #事件驱动模型。经测试epoll性能最优
accept_mutex on; #惊群现象,多个睡眠的进程被同时叫醒,但只有一个进程能获取到连接,这样会影响系>统性能。防止惊群现象发生。
multi_accept on; #设置允许同时接受多个网络连接,开启可以同时接受多个,即默认为一个工作进程只能一次接受一个新的网络连接。
worker_connections 65535; #单个work进程允许同时打开的连接数
}
http {
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 /var/log/nginx/access.log main;
open_file_cache max=10240 inactive=30s; #max设置缓存的最大个数,达到最大值时 采用LRU 算法进行管理, inactive参数配置到期时间为20秒。
open_file_cache_valid 30s; #缓存文件检查频率,确认经过30s之后再去看看缓存的内容是否有效,如果发生了更新,那么需要更新
open_file_cache_min_uses 2; #最小访问次数以将元素标记为活动使用
open_file_cache_errors on; #启动可以缓存在文件访问期间发生的错误
client_header_buffer_size 16k; #请求行+请求头的标准大小为16k
large_client_header_buffers 4 16k; #请求行+请求头的最大大小16k
client_body_buffer_size 20m; #缓存用户请求体的大小
client_body_temp_path /tmp/nginx/client_temp 1 2; #当用户请求体body太大,存储客户端请求的临时文件的目录
client_max_body_size 50m; #设置客户端请求体大小(针对于上传文件)
sendfile on; #文件读取高效(零拷贝),直接就在内核态之中把磁盘上的内容发到网卡上
aio on;
directio 20m;
tcp_nopush on; #启用 CORK[塞子]算法,提高网络传输效率
tcp_nodelay on; #禁用 Nagle 算法,提高网络实时性
keepalive_timeout 65; #HTTP 长连接超时时间
keepalive_requests 1000; #keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100。
reset_timedout_connection on; #直接以RST代替正常的四次挥手,快速释放内存
types_hash_max_size 2048;
server_tokens off; #隐藏Nginx版本信息
# 防爬虫部分
# 连接数限制
limit_conn_log_level error; #连接的错误日志级别
limit_conn_status 503; #连接错误返回的状态码
limit_conn_zone $binary_remote_addr zone=one:10m; #设置共享内存区域和给定键值的最大并发连接数 “none”为存储区名($binary_remote_addr = 用二进制来储存客户端的地址,1m 可以储存 32000 个并发会话 #在HTTP/2和SPDY中,每个并发请求被视为单独的连接.
#limit_conn_zone $server_name zone=perserver:10m; #设置共享内存区域和给定键值的最大允许—— (服务器连接数)
limit_conn one 10; #每个IP 地址并发请求都被视为一个单独的连接。
#limit_conn perserver 100; #服务器总连接数不得超过个数,超过请求的会被拒绝(默认返回状态码503)
# 请求数限制
limit_req_log_level error;
limit_req_status 503;
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; #每个IP并发请求被视为单独的请求数/每秒
# limit_req_zone $server_name zone=perserveres:10m rate=10000r/s; #总的请求数量/每秒
#gzip 资源压缩
gzip on; #启用或禁用响应的压缩
gzip_comp_level 2; #gzip压缩级别,级别越高消耗CPU资源越高
gzip_http_version 1.1; #gzip压缩协议版本
gzip_min_length 1024; #默认值为20,被压缩的响应的最小长度。长度仅由“ Content-Length”响应头字段确定。
gzip_disable "MSIE[1-6]\."; #禁止对客户端对IE1~6 进行报文压缩
gzip_types gzip_types text/plain text/css text/xml application/javascript application/json application/xml+rss; #gzip压缩类型可以查看文件样>例(mime.types)
gzip_buffers 32 4k; #gzip压缩缓冲区
#gunzip on; #启用访问自动解压.gz文件
#gzip_static always; #均会检查.gz 文件是否存在
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# 防盗链
valid_referers none blocked *.biadu.com ~\.google\. ; # 101.200.157.73(server_name),可接多个域名
if ($invalid_referer) { #内置变量,Referer”请求标头字段值
return 403; #如果blocked未包含的域名请求访问返回403状态码
}
location / {
limit_req zone=perip burst=5 nodelay; #平均每秒允许不超过 1 个请求,突发不超过 5 个请求 = [rate=r/s/+burst]。
# limit_req zone=perserveres burst=10000;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}