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 相关操作,及其定时任务的学习