10.Nginx配置文件与日志切割
Posted 柯正
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.Nginx配置文件与日志切割相关的知识,希望对你有一定的参考价值。
nginx配置文件详解
Nginx主配置文件/etc/nginx/nginx.conf
是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}
来表示开始与结束。
主要分成三个模块
- 核心模块
- 事件驱动模块
- HTTP模块
以下是配置文件详解
[root@web01 ~]# vim /etc/nginx/nginx.conf
############################################ 核心模块 ################################################
# nginx启动用户
user nginx;
# worker进程数
worker_processes auto; # auto 一般以你cpu核心数决定多少,也可以自定义
# 错误日志的路径 和 级别
error_log /var/log/nginx/error.log warn;
# pid文件的路径
pid /var/run/nginx.pid;
############################################ 事件驱动模块 ###########################################
events {
# 每一个worker进程允许连接数量
worker_connections 1024;
}
############################################ HTTP模块 ###############################################
http {
# 包含指定文件的内容,该文件是nginx浏览器允许访问的文件类型
include /etc/nginx/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"‘;
# 自定义格式
log_format zidingyi ‘zls - $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;
# 指定格式
access_log /var/log/nginx/zls_access.log zidingyi;
# 高效传输文件
sendfile on;
#tcp_nopush on;
# 长连接的超时时间
keepalive_timeout 65;
# 开启gzip压缩
#gzip on;
# 包含所有下面路径下conf结尾的文件
include /etc/nginx/conf.d/*.conf;
}
# 检测语法错误
[root@web01 /etc/nginx]# nginx -t
server层
[root@web01 /etc/nginx]# vim /etc/nginx/conf.d/default.conf
server { # server标签
listen 80; # 监听80端口
server_name localhost; # 本地ip(可以设置域名)
#charset koi8-r; # 字符编码
#access_log /var/log/nginx/host.access.log main; # 日志存放默认路径及格式
location / { # 网站访问位置
root /usr/share/nginx/html; # root变量,网站访问的默认站点目录
index index.html index.htm; # index变量,站点目录内默认寻找的前端页面index.html 或 index.htm
}
#error_page 404 /404.html; # 404错误页面,在站点目录下
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; # 5XX默认错误页面所在位置
location = /50x.html {
root /usr/share/nginx/html; # 这
}
######################################## nginx 结合 php ############################################
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# 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_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 {
# deny all;
#}
}
以上是默认的配置需要删除,自己创建站点目录
[root@web01 ~]# vim /etc/nginx/conf.d/yum.conf # 名字随便
server{ # server标签
listen 80; # 80端口
server_name www.zls.com; # 设置的域名
access_log /var/log/nginx/zls_access.log main; # 日志路径,不用系统日志
location / { # location控制访问目录
root /code; # 站点目录 root是定义的变量
index index.html; # 默认返回网站的文件是index.html
}
error_page 404 /404.html; # 404访问错误页面 (可以自定义写)
}
# 配置完退出后 nginx -t 检查配置
[root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
localtion
# http{} 层下允许有多个Server{}层,一个Server{}层下又允许有多个Location
# http{} 标签主要用来解决用户的请求与响应。
# server{} 标签主要用来响应具体的某一个网站。
# location{} 标签主要用于匹配网站具体URL路径。
Nginx虚拟主机配置
基于主机多IP
基于多IP方式,有两种方式
## 1. 多网卡多IP方式
# 绑定虚拟IP给eth0
[root@web01 ~]# ifconfig eth0:1 10.0.0.100/24 # :1和100随便写
[root@web01 ~]# ifconfig eth0:2 10.0.0.101/24
# 一个配置文件里写多个server标签
server {
listen 80;
server_name 10.0.0.100;
root /code;
index index.html;
}
server {
listen 80;
server_name 10.0.0.101;
root /code;
index index.html;
}
## 2.单网卡多IP方式
[root@web01 ~]# vim /etc/nginx/conf.d/yum1.conf
server {
listen 80;
server_name 10.0.0.100;
root /code;
index index.html;
}
[root@web01 ~]# vim /etc/nginx/conf.d/yum2.conf
server {
listen 80;
server_name 10.0.0.101;
root /code;
index index.html;
}
基于端口方式
[root@web01 ~]# vim /etc/nginx/conf.d/yum1.conf
server {
listen 80;
server_name 10.0.0.100;
root /code;
index index.html;
}
[root@web01 ~]# vim /etc/nginx/conf.d/yum2.conf
server {
listen 81;
...
...
...
基于域名模式
[root@web01 ~]# vim /etc/nginx/conf.d/yum1.conf
server {
listen 80;
server_name www.text.com;
root /code/text;
index index.html;
}
[root@web01 ~]# vim /etc/nginx/conf.d/yum2.conf
server {
listen 80;
server_name www.abc.com;
root /code/abc;
index index.html;
}
需要在hosts文件中解析
nginx的日志管理
Nginx有非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义格式
日志设置(格式)
# 1.log_format的作用是定义日志格式语法
## 日志配置语法
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:
access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
# 2.nginx默认日志格式语法
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘
‘$status $body_bytes_sent "$http_referer" ‘
‘"$http_user_agent" "$http_x_forwarded_for"‘;
# log_format 设置日志的格式
# main 日志名称
# 剩下的 日志格式(内容)
# 3.Nginx日志格式允许包含的内置变量
$remote_addr # 记录客户端IP地址
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间。单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒
# 注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。
# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器地址。
日志调用
[root@web01 ~]# vim /etc/nginx/conf.d/yum.conf
server{
listen 80;
server_name www.zls.com;
access_log /var/log/nginx/zls_access.log main; # 日志调用,使用man格式
location / {
root /code;
index index.html;
}
}
# 这样进这个站点目录的日志就在 /var/log/nginx/zls_access.log 下,就不会在全局日志里
日志路径
默认日志在/var/log/nginx/下面,系统有脚本切割和压缩
日志的切割
系统默认的日志切割脚本/etc/logrotate.d
下
[root@web01 ~]# vim /etc/logrotate.d/nginx
vim /etc/logrotate.d/nginx
# 指定切割的日志,/var/log/nginx 目录下所有以log结尾的日志
/var/log/nginx/*.log {
# 按天切割
daily
# 忽略丢失日志
missingok
# 保留52天
rotate 52
# 日志文件压缩
compress
# 延迟压缩
delaycompress
# 忽略空日志
notifempty
# 创建日志的权限,和属主 属组
create 640 nginx adm
# 指定其他的脚本
sharedscripts
# 指定切割的命令
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
# 脚本结束
endscript
}
# 日志切割后的效果
[root@web01 ~]# ll /var/log/nginx/
total 4044
-rw-r----- 1 www adm 54438 Oct 12 03:28 access.log-20200516.gz
-rw-r----- 1 www adm 28657 Oct 13 03:48 access.log-20200516.gz
-rw-r----- 1 www adm 10135 Oct 12 03:28 error.log-20200516.gz
-rw-r----- 1 www adm 7452 Oct 13 03:48 error.log-20200516.gz
以上是关于10.Nginx配置文件与日志切割的主要内容,如果未能解决你的问题,请参考以下文章
12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期
12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间
12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期时间