一 . 结构说明
说明:
- main: 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- event: 配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- http: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
3.1 server:配置虚拟主机的相关参数,一个http中可以有多个server。
3.2 upstream:上有服务器设置,主要为方向代理,负载均衡相关配置
3.3 location: 配置请求的路由,以及各种页面的处理情况。
二. 配置详解说明:
1. 全局配置说明
# 启动nginx工作进程的用户和组,默认为nobody
user nginx nginx;
# 启动nginx工作进程的数量,默认为1
worker_processes auto;
# 将Nginx⼯作进程绑定到指定的CPU核⼼,默认Nginx是不进⾏进程绑定的,
# 绑定并不是意味着当前nginx进程独占⼀核⼼CPU,但是可以保证此进程不会运⾏在其他核⼼上,这就极⼤减少了nginx的⼯作进程在不同的cpu核⼼上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,
# 因此可以有效的提升nginx服务器的性能,也可以设置为auto。
worker_cpu_affinity 0001 0010 0100 1000;
# 可以执行以下命令观察工作进程是否一致运行在同一核CPU上
# [root@CentOS7-01 ~]#watch -n1 'ps axo pid,cmd,psr,user | grep nginx|grep -v grep'
#错误⽇志记录配置,语法:error_log file [debug | info | notice | warn | error | crit | alert | emerg]
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log error;
# pid文件保存路径(很有用)
pid /run/nginx.pid;
# 工作进程nice值,-20~19
worker_priority 0;
#这个数字包括Nginx的所有连接(例如与代理服务器的连接等),⽽不仅仅是客户端的连接,另⼀个考虑因素是实际的并发连接数不能超过系统级别的最⼤打开⽂件数的限制
worker_rlimit_nofile 65536;
#前台运⾏Nginx服务⽤于测试、docker等环境。
daemon off;
#是否开启Nginx的master-woker⼯作模式,仅⽤于开发调试场景。
master_process off|on;
2. even
配置
#事件模型配置参数
events {
#设置单个⼯作进程的最⼤并发连接数
worker_connections 65536;
#使⽤epoll事件驱动,Nginx⽀持众多的事件驱动,⽐如select、poll、epoll,只能设置在 events模块中设置。
use epoll;
# 优化同⼀时刻只有⼀个请求⽽避免多个睡眠进程被唤醒的设置,
# on为防⽌被同时唤醒,默认为off,全部唤醒的过程也成为"惊群",因此nginx刚安装完以后要进⾏适当的优化。
accept_mutex on;
# Nginx服务器的每个⼯作进程可以同时接受多个新的⽹络连接,但是需要在配置⽂件中配置,
# 此指令默认为关闭,即默认为⼀个⼯作进程只能⼀次接受⼀个新的⽹络连接,打开后即可同时接受多个。
multi_accept on;
}
3. http
配置详情
http {
# 导入支持的文件类型
include mime.types;
# 设置默认的类型,会提示下载不匹配的类型文件
default_type application/octet-stream;
# 日志配置部分,-->单独看日志模块的配置
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# 后面的main标识日志的格式, 需要放开上面的log_format的注释. 支持定义多个日志
#access_log logs/access.log main;
# 自定义优化参数
#实现文件零拷贝
sendfile on;
#在开启了sendfile的情况下,合并请求后统一发送给客户端
#tcp_nopush on;
# 在开启了keepalived模式下的连接是否启⽤TCP_NODELAY选项,
# 当为off时,延迟0.2s发送,默认为on,不延迟发送,⽴即发送用户响应报⽂。
#tcp_nodelay off;
#keepalive_timeout 0;
# 设置会话保持时间
keepalive_timeout 65;
# 开启文件压缩
#gzip on;
server {
# 设置监听地址和端口
listen 80;
#设置server name,可以以空格隔开写多个并支持正则表达式
server_name localhost;
# 设置编码格式,默认是俄语格式,可以改为utf-8
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #定义错误页面
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# 以http的⽅式转发php请求到指定web服务器
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000; #以fastcgi的⽅式转发php请求到php处理
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht { #拒绝web形式访问指定⽂件,如很多的⽹站都是通过.htaccess⽂件来改变⾃⼰的重定向等功能。
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server { #⾃定义虚拟server
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm; #指定默认⽹⻚⽂件,此指令由ngx_http_index_module模块提供
# }
#}
# HTTPS server
#
#server { #https服务器配置
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
4. 日志格式的说明
通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息;
通过错误日志,你可以得到系统某个服务或server的性能瓶颈等。
参数 | 说明 |
---|---|
$remote_addr | 客户端的ip地址(代理服务器,显示代理服务ip) |
$remote_user | 用于记录远程客户端的用户名称(一般为“-”) |
$time_local | 用于记录访问时间和时区 |
$request | 用于记录请求的url以及请求方法 |
$status | 响应状态码,例如:200成功、404页面找不到等。 |
$body_bytes_sent | 给客户端发送的文件主体内容字节数 |
$http_user_agent | 用户所使用的代理(一般为浏览器) |
$http_x_forwarded_for | 可以记录客户端IP,通过代理服务器来记录客户端的ip地址 |
$http_referer | 可以记录用户是从哪个链接访问过来的 |
5. 日志的企配置以及切割
- 编写自动分割Nginx日志的脚本
#!/bin/bash
#设置日志文件存放目录
LOGS_PATH=/usr/local/nginx/logs
#备分文件名称
YESTERDAY=$(date -d "yesterday" +%Y%m%d%H%M)
#重命名日志文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
- 设置Linux的定时任务`cron
0 0 * * * root /usr/local/nginx/logs/nginxLogRotate.sh