# 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 = 30 s ; # max设置缓存的最大个数,达到最大值时 采用LRU 算法进行管理 , inactive参数配置到期时间为 20 秒。
open_file_cache_valid 30 s ; # 缓存文件检查频率,确认经过 30 s之后再去看看缓存的内容是否有效,如果发生了更新,那么需要更新
open_file_cache_min_uses 2 ; # 最小访问次数以将元素标记为活动使用
open_file_cache_errors on ; # 启动可以缓存在文件访问期间发生的错误
client_header_buffer_size 16 k ; # 请求行 + 请求头的标准大小为 16 k
large_client_header_buffers 4 16 k ; # 请求行 + 请求头的最大大小 16 k
client_body_buffer_size 20 m ; # 缓存用户请求体的大小
client_body_temp_path / tmp / nginx / client_temp 1 2 ; # 当用户请求体body太大,存储客户端请求的临时文件的目录
client_max_body_size 50 m ; # 设置客户端请求体大小 ( 针对于上传文件 )
sendfile on ; # 文件读取高效(零拷贝),直接就在内核态之中把磁盘上的内容发到网卡上
aio on ;
directio 20 m ;
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 : 10 m ; # 设置共享内存区域和给定键值的最大并发连接数 “none”为存储区名($binary_remote_addr = 用二进制来储存客户端的地址, 1 m 可以储存 32000 个并发会话 # 在HTTP / 2 和SPDY中,每个并发请求被视为单独的连接 .
# limit_conn_zone $server_name zone = perserver : 10 m ; # 设置共享内存区域和给定键值的最大允许—— ( 服务器连接数 )
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 : 10 m rate = 10 r / s ; # 每个IP并发请求被视为单独的请求数 / 每秒
# limit_req_zone $server_name zone = perserveres : 10 m rate = 10000 r / 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 4 k ; # 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 / 50 x . html ;
location = / 50 x . html {
}
}