nginx(三) : Nginx配置段介绍和日志切割

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,是啥你就写啥:php

192.168.8.222		a.com

root /var/www/a.com 可能不存在,若不存在,请自行添加;html

index index.html index.html也是如此,自行添加;linux

基于端口的虚拟主机配置示例

server段配置
server {
        listen 8080;
        server_name 192.168.1.204;

        location / {
                root /var/www/html8080;
                index index.html;
        }
    }

注意事项和基于域名的配置同样,请自行翻阅查看nginx

日志管理

咱们观察nginx的server段,能够看到以下相似信息**#access_log logs/host.access.log main;**,这说明 该server, 它的访问日志的文件是 logs/host.access.log , 使用的格式”main”格式. 除了main格式,你能够自定义其余格式.shell

日志格式main介绍

默认的main配置以下:windows

log_format  main  
		'$remote_addr - $remote_user [$time_local] "$request" '
       '$status $body_bytes_sent "$http_referer" '
       '"$http_user_agent" "$http_x_forwarded_for"';

main 格式信息介绍bash

格式 信息
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以下.net

#!/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 相关操做,及其定时任务的学习,请参考:https://my.oschina.net/ahusky/blog/1837896

日志分隔 参见:https://www.nginx.com/resources/wiki/start/topics/examples/logrotation/

相关文章
相关标签/搜索