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/

相關文章
相關標籤/搜索