十二週三次課

一、 訪問日誌

• 日誌格式php

• vim /usr/local/nginx/conf/nginx.conf //搜索log_formatcss

Nginx日誌格式:html

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';

說明:
「combined_ realip」:日誌格式名稱;nginx

'$remote_ addr $http_ x_ forwarded_ for [$time_ local]' ' $host "$request_uri" $status' ' "$http_ referer" "$http_ user_ agent"' :日誌內容。shell

combined_realip:定義日誌格式別名,默認爲combined_realip,以後改成test001;
註釋:vim

名稱 含義
$remote_addr 客戶端IP(公網IP)
$http_x_forwarded_for 代理服務器的IP
$time_local 服務器本地時間
$host 訪問主機名(域名)
$request_uri 訪問的URL地址
$status 狀態碼,好比404
$http_referer referer
$http_user_agent user_agent

 

定義虛擬主機日誌格式

定義虛擬主機的前提是在Nginx配置文件中設定日誌格式,而後才能在虛擬主機中進行調用(格式名稱),access_log /tmp/1.log combined_realip,這裏的 combined_realip就是在nginx.conf中定義的日誌格式名字,得與nginx.conf匹配;緩存

[root@localhost ~]# cd /usr/local/nginx/conf/vhost/
[root@localhost vhost]# ls
aaa.com.conf  test.com.conf

定義test.com.conf日誌格式:  
[root@localhost vhost]# vim test.com.conf  
server
{   listen 80;
    server_name test.com test2.com test3.com;
    index. index.html index.htm index.php;
    root /data/wwwroot/test.com
    if ($host != 'test.com' ){
         rewrite ^/(.*)$ http://test.com/$1 permanent;
    }
    access_log /tmp/test.com.log combined_realip;
    #指定日誌位置及格式:/tmp/test.com.log後面是日誌格式(wzq)combined_realip

檢查錯誤:
[root@localhost vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost vhost]# /usr/local/nginx/sbin/nginx -s reload       #加載

訪問一次
[root@localhost vhost]# !curl


查看日誌
[root@localhost vhost]# cat /tmp/test.com.log

注: 若是不指定日誌格式,系統使用默認日誌格式,記錄內容較簡單。bash

檢測:服務器

[root@localhostvhost]# curl -x127.0.0.1:80 test.com
This is test.com
[root@localhost vhost]# cat /tmp/test.com.log    查看日誌中的時間、域名、
127.0.0.1 - [11/Aug/2017:15:09:54 +0800] test.com "/" 200 "-" "curl/7.29.0"

 

二、Nginx日誌切割

• 自定義shell 腳本curl

• vim /usr/local/sbin/nginx_log_rotate.sh//寫入以下內容

#! /bin/bash

## 假設nginx的日誌存放路徑爲/data/logs/

d=`date -d "-1 day" +%Y%m%d`

logdir="/data/logs"

nginx_pid="/usr/local/nginx/logs/nginx.pid"

cd $logdir

for log in `ls *.log`

do

    mv $log $log-$d

done

/bin/kill -HUP `cat $nginx_pid`

• 任務計劃

• 0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh

由於Nginx沒有自帶的日誌切割工具,因此須要藉助系統日誌切割命令或使用日誌切割腳本。

日誌切割腳本

爲了方便管理,shell腳本統一保存位置:/usr/local/sbin/

[root@localhost vhost]# vim /usr/local/sbin/nginx_log_rotate.sh

#! /bin/bash
d=`date -d "-1 day" +%Y%m%d` 
#定義切割時間(切割一天前的日誌)
logdir="/tmp/"
#此處指定要切割的日誌路徑(該路徑來自虛擬主機配置文件)
nginx_pid="/usr/local/nginx/logs/nginx.pid"
#調用pid的目的是執行命令:/bin/kill -HUP `cat $nginx_pid`
#該命令等價於命令:nginx -s reload(從新加載文件),確保與虛擬主機配置文件變動保持同步
#該地址來自nginx配置文件
cd $logdir
for log in `ls *.log`
do
    mv $log $log-$d
done
#此處使用通配進行循環,對全部複合條件的日誌文件進行切割
/bin/kill -HUP `cat $nginx_pid`
#執行此命令進行重載生成新的日誌文件來記錄新的日誌

執行該腳本:

[root@localhost vhost]# sh -x /usr/local/sbin/nginx_log_rotate.sh
++ date -d '-1 day' +%Y%m%d
+ d=20170810
+ logdir=/tmp/
+ nginx_pid=/usr/local/nginx/logs/nginx.pid
+ cd /tmp/
++ ls test.com.log yum.log
+ for log in '`ls *.log`'
+ mv test.com.log test.com.log-20170810
+ for log in '`ls *.log`'
+ mv yum.log yum.log-20170810
++ cat /usr/local/nginx/logs/nginx.pid
+ /bin/kill -HUP 1251


[root@localhost vhost]# ls /tmp/
...    ...      ...    test.com.log-20180615
..    ...        ...
...   test.com.log(新生成的)
[root@localhost vhost]# cat /usr/local/sbin/
iptables   nginx_logrotate.sh

[root@localhost vhost]# cat /usr/local/sbin/nginx_logrotate.sh

說明: -x選項的做用是顯示腳本執行過程。

注: 該腳本配合任務計劃cron使用,按期進行切割和清理。

任務計劃執行腳本

crontab -e
寫入腳本
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh

意思:天天凌晨0點執行腳本/usr/local/sbin/nginx_log_rotate.sh

如何腳本刪除log

find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm          #刪除三十天之前的文件

 

三、 靜態文件不記錄日誌&過時時間

• 配置以下

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

          expires      7d;

          access_log off;

    }

location ~ .*\.(js|css)$

    {

          expires      12h;

          access_log off;

    }

添加的核心配置參數:

[root@localhost vhost]# vim test.com.conf
server
{
   listen 80;
   server_name test.com test2.com test3.com;
   index index.html index.htm index.php;
   root /data/wwwroot/test.com;
   if ($host != 'test.com' ) {
        rewrite ^/(.*)$ http://test.com/$1 permament;
   }

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$          #匹配文件類型:正則(標誌.*)
    
    {
          expires      7d;
          #過時時間爲7天
          access_log off;
          #不記錄該類型文件的訪問日誌
    }
   location ~ .*\.(js|css)$
    {
          expires      12h;
          #過時時間爲12小時
          access_log off;
          #不記錄該類型文件的訪問日誌
    }
    access_log /tmp/test.com.log combined_realip;
    #指定日誌位置及格式
}

 

檢測:

[root@localhost vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost vhost]# /usr/local/nginx/sbin/nginx -s reload

訪問index.html:
[root@localhost vhost]# !curl
curl -x127.0.0.1:80 test.com
This is test.com

[root@localhost vhost]# !cat
cat /tmp/test.com.log 
127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0"
即:有日誌!

訪問baidu.png文件:
[root@localhost test.com]# curl -x127.0.0.1:80 test.com/baidu.png -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Fri, 11 Aug 2017 09:47:57 GMT
Content-Type: image/png
Content-Length: 3706
Last-Modified: Tue, 01 Aug 2017 10:13:45 GMT
Connection: keep-alive
ETag: "59805459-e7a"
Expires: Fri, 18 Aug 2017 09:47:57 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes
說明:max-age=604800s=7天,即該文件緩存的過時時間爲7天!

[root@localhost test.com]# cat /tmp/test.com.log 
127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0"
即:無該文件的訪問日誌!!!

禁止日誌輸出,就查看不到日誌了

access_log off;
error_log off;

切換到/data/wwwroot/test.com目錄

測試過時時間,使用-I.curl -x 127.0.0.1:80 I test.com/2.js

[root@localhost vhost]# cd /data/wwwroot/test.com/

[root@localhost test.com]# ls 
admin   index.html
[root@localhost test.com]#vim 2.js
sdjkhakjshd
[root@localhost test.com]# curl -x 127.0.0.1:80 test.com/2.js
HTTP/1.1 200 OK
Service: nginx/1.12.1
Date: Sun,23 Jul 2018 08:43.24
Content-Type......
...
...
..
Cache-Control:max-age=43200      #過時時間
..

查看日誌,訪問js文件,有沒有被記錄;發現並無記錄
[root@localhost test.com]# cat /tmp/test.com.log
[root@localhost test.com]# curl -x 127.0.0.1:80 test.com/2.jsssd
[root@localhost test.com]# cat /tmp/test.com.log

緣由在/usr/local/nginx/conf/vhost/test.com.conf中已經定義了

取消過時時間,方法:vi /usr/local/nginx/conf/vhost/test.com.conf,註釋掉expires,把expires前面添加#

查看過時時間
[root@localhost test.com]# curl -x127.0.0.1:80 -I test.com/2.js
...
Cache Control:max age=34234      過時時間  

[root@localhost test.com]# vim test.com.conf
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$          #匹配文件類型:正則(標誌.*)
    
    {
          expires      7d;
          #過時時間爲7天
          access_log off;
          #不記錄該類型文件的訪問日誌
    }
location ~ .*\.(js|css)$
    {
#          expires      12h;
          #過時時間爲12小時
          access_log off;
          #不記錄該類型文件的訪問日誌
    }
    access_log /tmp/test.com.log combined_realip;
    #指定日誌位置及格式
[root@localhost vhost]# /usr/local/nginx/sbin/nginx -s reload

  
[root@localhost test.com]#!curl         #查看過時時間有沒有被取消
......
HTTP/1.1 200  OK
...
...
...
....
....

                 #裏面沒有Cache-Control,就沒有過時時間了
...

 

常見問題:

一、在生產環境中,我在Nginx主配置文件nginx.conf中定義了log_format格式,而後一個域名一個日誌文件,能夠這麼寫嗎?

1.png

2.png

3.png

答:1 每一個虛擬主機能夠定義本身的日誌名字,互不影響。

 

二、第二個問題,在公司Nginx的1.11版本下的主配置文件配置log_format,include中包含的.conf文件沒法識別在主配置中定義的log_format格式,不知道是否是1.11版本後,nginx的log_format沒法在其它虛擬主機配置中被識別?

答:2 log_format不分nginx版本,只有在主配置文件中定義了,在哪裏均可以引用。

相關文章
相關標籤/搜索