Nginx 建议生产配置
#如果不使用root用户运行,就不能把目录放在 /root/ 目录下了,可以选择放在 /home/www 下,并设置 www 的权限 777
user www;
# nginx pid 存储路径
pid /run/nginx.pid;
# 推荐是CPU内核数或者内核数的倍数
worker_processes 4;
# 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;
# 事件驱动
events {
# epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型
use epoll;
# 一个工作进程可以同时接受所有的新连接
multi_accept on;
# 防止惊群问题
accept_mutex on;
# connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”
worker_connections 65535;
}
http {
charset utf-8;
# 开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
sendfile on;
# 必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
tcp_nopush on;
# 也是防止网络阻塞,不过要包涵在keepalived参数才有效
tcp_nodelay on;
#隐藏版本号
server_tokens off;
#types_hash_max_size影响散列表的冲突率。types_hash_max_size越大,就会消耗更多的内存,但散列key的冲突率会降低,检索速度就更快。
types_hash_max_size 2048;
types_hash_bucket_size 64;
# 客户端上传的body的最大值。超过最大值就会发生413(Request Entity Too Large)错误。如果有大文件上传的需求可以适当修改
client_max_body_size 100M;
#HTTP连接的持续时间。设的太长会使无用的线程变的太多。这个根据自己服务器访问数量、处理速度以及网络状况方面考虑。
keepalive_timeout 65;
# MIME 浏览器当中可以显示的内容有HTML/GIF/XML/Flash等内容,浏览器为取得这些资源需要使用MIMEType,即MIME是网络资源的媒体类型,Nginx作为Web服务器必须要能够识别全都请求的资源类型,在nginx.conf文件中引用了一个第三方文件,
include mime.types;
default_type application/octet-stream;
# Log Format 日志格式
log_format cloudflare '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_cf_ray $http_cf_connecting_ip $http_x_forwarded_for $http_x_forwarded_proto $http_true_client_ip $http_cf_ipcountry $http_cf_visitor $http_cdn_loop';
# 日志配置 可以在服务器上做日志切割
access_log logs/access.log cloudflare;
error_log logs/error.log warn;
# 负载均衡
upstream gateway {
# 不配置为轮循
# 根据IP Hash
# ip_hash;
# 将请求分配到连接数最少的服务上。
# least_conn;
# 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
# fair;
# weight 为权重配置
server localhost:8001 weight=1;
server localhost:8002 weight=1;
}
# 静态资源 + 反向代理配置
server {
listen 80;
server_name localhost;
root /home/www;
# 启用gzip,对响应数据进行在线实时压缩,减少数据传输量
gzip on;
# 用于设置在使用Gzip功能时是否发送带有“Vary:Accept-Encoding”头域的响应头部,该头域的主要功能是告诉接收方发送的数据经过了压缩处理,开启后端效果是在响应头部Accept-Encoding: gzip,对于本身不支持Gzip的压缩的客户端浏览器是有用的。
gzip_vary on;
# 设置请求者代理服务器,该如何缓存内容
#off – 关闭所有的代理结果数据压缩
#expired – 如果header中包含”Expires”头信息,启用压缩
#no-cache – 如果header中包含”Cache-Control:no-cache”头信息,启用压缩
#no-store – 如果header中包含”Cache-Control:no-store”头信息,启用压缩
#private – 如果header中包含”Cache-Control:private”头信息,启用压缩
#no_last_modified – 启用压缩,如果header中包含”Last_Modified”头信息,启用压缩
#no_etag – 启用压缩,如果header中包含“ETag”头信息,启用压缩
#auth – 启用压缩,如果header中包含“Authorization”头信息,启用压缩
#any – 无条件压缩所有结果数据
gzip_proxied any;
# 设置压缩程度,包括级别1到级别9,级别1表示压缩程度最低,压缩效率最高;级别9表示压缩程度最高,压缩效率最低,最费时间
gzip_comp_level 6;
# Nginx服务器可以根据MIME类型选择性开启Gzip压缩功能
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
# 反向代理配置
# 匹配优先级
# = 要求请求字符与其精确匹配 成功则立即处理 , ^~ 前缀匹配 匹配到立即处理 , ~ 区分大小写的正则匹配 匹配到立即处理 ,~* 不区分大小写的正则匹配 匹配到立即处理 遵循最大匹配原则 正则匹配相同按文件排序优先级处理
# /a 普通前缀匹配 所有正则未匹配 选择普通前缀匹配 ,/ 没有任何匹配成功处理
location ^~ /api/ {
# Proxy headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#
proxy_set_header Host $host:$server_port;
# Proxy timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# 后缀带上 / 会删除匹配符,没有 / 则不删除匹配符
proxy_pass http://gateway/;
}
# 静态资源
location / {
try_files $uri $uri/ /index.html;
}
# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
日志切割以及定时清理
日志切割&清理脚本
#!/bin/bash
LOGS_PATH=$1
DAYS=$2
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
#按天切割日志
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
#向 Nginx 主进程发送 USR1 信号,重新打开日志文件,否则会继续往mv后的文件写内容,导致切割失败.
kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
#删除配置的N天前的日志
cd ${LOGS_PATH}
find . -mtime +${DAYS} -name "*20[1-9][3-9]*" | xargs rm -f
exit 0
创建日志切割以及清理脚本
sudo vi /usr/local/nginx/logs/cut_nginx_log.sh
附予执行权限
sudo chmod +x cut_nginx_log.sh
添加定时任务
crontab -e
#每天0时1分进行日志分割 参数一: 日志路径 参数二: 日志保留天数
01 00 * * * /usr/local/nginx/logs/cut_nginx_log.sh /usr/local/nginx/logs/ 30