Nginx訪問日誌、Nginx日誌切割 、靜態文件不記錄日誌和過時時間

Nginx訪問日誌

  1. 定義日誌內容,經過編輯Nginx的主配置文件來定義日誌內容。php

    vim /usr/local/nginx/conf/nginx.conf
     經過搜索log_format找到定義日誌內容的行
     log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'這裏面combined_realip是定義的日誌格式的名字,能夠自定義,可是後面用的時候必定要寫把名字寫對。後面的選項纔是會顯示在日誌中的內容。
  2. 日誌的格式(能夠在日誌中顯示出來的內容)css

    $remote_addr				 客戶端ip(公網ip)
     $http_x_forwarded_for		代理服務器ip
     $time_local				  服務器本地時間
     $host						訪問主機名(域名)
     $request_uri				 訪問的url地址
     $status					  狀態碼
     $http_referer				從哪一個站點跳轉到該站點的(直接訪問該項爲-)
     $http_user_agent			訪問方式(經過XX瀏覽器,或curl方式訪問)
  3. 將內容添加到log_format xxxxx(自定義名字) 後面,最後以;結束。html

  4. 將日誌格式應用到test.com這個站點上mysql

    vim /usr/local/nginx/conf/vhost/test.com.conf
     在最後一個}前面添加這一行,/tmp/test.com.log是咱們自定義的路徑和文件名,comeon是咱們前面定義的日誌格式的名字。access_log /tmp/test.com.log comeon;(結尾這個;不能少,少了報錯)
  5. 驗證並從新加載nginx

    /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
      /usr/local/apache/bin/apachectl graceful
  6. 使用瀏覽器和curl訪問站點,而後查看日誌內容。sql

    tail -5 /tmp/test.com.log 
     192.168.254.1- 04/Sep/2018:17:44:01 +0800 test.com / 301 - Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
     127.0.0.1- 04/Sep/2018:17:45:25 +0800 test.com / 301 - curl/7.29.0

其中192.168.254.1是客戶端ip,-是代理ip(沒有代理就顯示-),04/Sep/2018:17:44:01 +0800是本地時間,test.com是域名,/是uri,301是status,-是referer,Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)是訪問方式。apache

##Nginx日誌切割vim

  1. Nginx和Apache不一樣,它沒有自帶的日誌切割工具,須要咱們本身寫腳原本切割日誌,常規狀況下,腳本的存放位置咱們都會選擇/usr/local/sbin/下。填寫下列內容:瀏覽器

    #! /bin/bash						//可執行腳本的慣例開頭
     d=`date -d "-1day" +%Y%m%d`		 //作一個變量(echo $d=年月日格式的日期。)
     logdir=`/tmp/`				   	//日誌的存放目錄
     nginx_pid="/usr/local/nginx/logs/nginx.pid" //給nginx_pid作變量,後面部分是客觀存在的。是爲了最後一步作鋪墊。
     cd $logdir						  //進入/tmp/下
     for log in `ls *.log`			 //下面這些代碼的意思是一個循環,
     do					//列出/tmp/下.log結尾的文件,將該文件重命名爲
     mv $log $log-$d		//*.log-yy/mm/dd的格式
     done
     /bin/kill -HUP `cat $nginx_pid`  //這至關於.../nginx -s reload,會建立新的日誌文件$log。
  2. 這個腳本是須要配合任務計劃cron使用的。緩存

  3. 驗證,運行腳本

    [root[@localhost](https://my.oschina.net/u/570656) tmp]# sh -x /usr/local/sbin/nginx_log_rotate.sh
  4. 查看tmp下的日誌文件

    [root[@localhost](https://my.oschina.net/u/570656) tmp]# ls /tmp
     mysql.sock  pear  php-fcgi.sock  test.com.log  test.com.log-20180903

能夠看到,/tmp下已經生成了以日期結尾的日誌文件

  1. 建立任務計劃

    [root[@localhost](https://my.oschina.net/u/570656) tmp]# crontab -e
     0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh

天天凌晨零點自動切割日誌。

靜態文件不記錄日誌和定義過時時間

  1. 一個網站裏可能包含不少靜態文件,好比jpg,png,gif,js,css等,若是每個訪問都記錄日誌的話,日誌文件會瘋狂增加,這就須要配置靜態文件不記錄日誌了。而jpg,gif等每每文件很大,若是每一次訪問都要從服務器上下載的話會很佔用帶寬,咱們能夠經過延長它們的過時時間來下降帶寬的佔用,讓這些靜態文件在客戶瀏覽器中保存的時間延長。

  2. 配置內容以下:

    location ~.*\.(jpg|gif|png|jpeg|bmp|swf)$      //指定文件類型
         {
     	    expires		7d;					 //會在客戶瀏覽器中緩存7天
     		access_log off;					    //不記錄日誌
     	}
     location ~.*\.(js|css)$
         {
     	    expires		12h;				//在客戶瀏覽器中緩存12小時
     		access_log off;
     	}
  3. 驗證 使用瀏覽器和curl命令分別訪問test.com/index.html和test.com/1.jpg

    [root[@localhost](https://my.oschina.net/u/570656) test.com]# curl -x127.0.0.1:80 test.com/1.jpg -I
     HTTP/1.1 200 OK
     Server: nginx/1.15.3
     Date: Tue, 04 Sep 2018 14:46:35 GMT
     Content-Type: image/jpeg
     Content-Length: 845941
     Last-Modified: Tue, 14 Jul 2009 05:32:31 GMT
     Connection: keep-alive
     ETag: "4a5c186f-ce875"
     Expires: Tue, 11 Sep 2018 14:46:35 GMT
     Cache-Control: max-age=604800
     Accept-Ranges: bytes
    
     [root[@localhost](https://my.oschina.net/u/570656) test.com]# curl -x127.0.0.1:80 test.com/index.html -I
     HTTP/1.1 200 OK
     Server: nginx/1.15.3
     Date: Tue, 04 Sep 2018 14:46:51 GMT
     Content-Type: text/html
     Content-Length: 14
     Last-Modified: Mon, 03 Sep 2018 17:48:28 GMT
     Connection: keep-alive
     ETag: "5b8d73ec-e"
     Accept-Ranges: bytes
    
     [root@localhost test.com]# !cat
     cat /tmp/test.com.log
     192.168.254.1- 04/Sep/2018:22:45:16 +0800 test.com /index.html 200 - Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
     127.0.0.1- 04/Sep/2018:22:46:51 +0800 test.com /index.html 200 - curl/7.29.0

能夠看到日誌文件中只記錄了test.com/index.html的訪問,沒有記錄test.com/1.jpg的訪問。 在實際生產環境中,這樣能夠大大下降日誌文件的增加速度和服務器帶寬的使用狀況。

相關文章
相關標籤/搜索