Nginx配置段
// 全局区
worker_processes 1; // 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,一般设置为 CPU数*核数
Event {
// 一般是配置nginx连接的特性
// 如1个word能同时允许多少连接
worker_connections 1024; // 这是指 一个子进程最大允许连1024个连接
}
http { //这是配置http服务器的主要段
Server1 { // 这是虚拟主机段
Location { //定位,把特殊的路径或文件再次定位 ,如image目录单独处理
} /// 如.php单独处理
}
Server2 {
}
}
基于域名的虚拟主机示例
server 端配置
server {
listen 80; #监听端口
server_name a.com; #监听域名
location / {
root /var/www/a.com; #根目录定位
index index.html;
}
}
注意
server_name a.com;这个a.com不是我们的,所以需要修改windows电脑上的hosts,在其最后面添加一行,其中192.168.8.222 是你nginx配置的服务器IP,是啥你就写啥:
192.168.8.222 a.com
root /var/www/a.com 可能不存在,若不存在,请自行添加;
index index.html index.html也是如此,自行添加;
基于端口的虚拟主机配置示例
server段配置
server {
listen 8080;
server_name 192.168.1.204;
location / {
root /var/www/html8080;
index index.html;
}
}
注意事项和基于域名的配置一样,请自行翻阅查看
日志管理
我们观察nginx的server段,可以看到如下类似信息**#access_log logs/host.access.log main;**,这说明 该server, 它的访问日志的文件是 logs/host.access.log , 使用的格式”main”格式. 除了main格式,你可以自定义其他格式.
日志格式main介绍
默认的main配置如下:
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
main 格式信息介绍
格式 | 信息 |
remote_addr | 远程IP |
remote_user | 远程用户/用户时间 |
time_local | 用户时间 |
request | 请求方法,协议 |
status | 请求方法(如GET/POST) |
body_bytes_sent | 请求body长度 |
http_referer | referer来源信息,就是你是从哪里访问过来的,百度/谷歌 |
http_user_agent | 用户代理/蜘蛛 ,被转发的请求的原始IP |
http_x_forwarded_for | 在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP |
日志文件中记录信息示例如下(与main格式相对应):
192.168.8.108 - - [28/Jun/2018:19:01:52 +0800] "GET / HTTP/1.1"
304 0 "-"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"
Nginx日志分隔
错误实例
[root@localhost nginx]# cd logs/
[root@localhost logs]# mv z.com.access.log z.com.access.log1
[root@localhost logs]# ll
总用量 20
-rw-r--r--. 1 root root 776 6月 23 16:00 access.log
-rw-r--r--. 1 root root 6220 6月 29 10:02 error.log
-rw-r--r--. 1 root root 6 6月 29 09:30 nginx.pid
-rw-r--r--. 1 root root 1232 6月 29 10:02 z.com.access.log1
[root@localhost logs]# tail -f z.com.access.log1
192.168.8.108 - - [29/Jun/2018:10:02:52 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0" "-"
- 为神马上边的命令执行,即将z.com.access.log 重命名为 z.com.access.log1 ,日志文件的输出的地址是在 z.com.access.log1?
确实按照我们一贯的理解,应该会重新生成一个z.com.access.log 进行输出,但linux 的输出是针对挂在点的,重命名并不会改变log文件的挂载点。
Shell 定时任务日志切割
shell脚本runlog.sh如下
#!/bin/bash
echo "--------日志切割start----------"
LOGPATH=/usr/local/nginx/logs/z.com.access.log
BASEPATH=/data
BACKUPS_PATH=$BASEPATH/$(date -d yesterday +%Y%m%d%H%M).z.com.access.log
mv $LOGPATH $BACKUPS_PATH
touch $LOGPATH
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
echo "--------日志切割end----------"
说明:
- 1). 上面的脚本实现的是:按照分钟实现日志的切割;
- 2). 先定义了三个路径,LOGPATH是nginx 日志实时输出的路径,BASEPATH是切割后日志的存储路径,BACKUPS_PATH是切割后带日志文件名的存储路径
- 3). 执行mv 操作,将日志的实时输出文件移动到日志备份的文件夹data下,并重命名
- 4). 创建新的日志文件,并执行 kill -USER1的操作,给nginx 主进程发信号,重新打开日志文件进行输出。
定时任务
上面的日志切割确实完成的日志的切割操作,但每次执行都要手动的执行,太鸡儿费劲了,何不整个定时任务了,每分钟执行一次,操作如下:
# crontab –e
*/1 * * * * runlog.sh
文档参考
crontab 相关操作,及其定时任务的学习