定義日誌內容,經過編輯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是定義的日誌格式的名字,能夠自定義,可是後面用的時候必定要寫把名字寫對。後面的選項纔是會顯示在日誌中的內容。
日誌的格式(能夠在日誌中顯示出來的內容)css
$remote_addr 客戶端ip(公網ip) $http_x_forwarded_for 代理服務器ip $time_local 服務器本地時間 $host 訪問主機名(域名) $request_uri 訪問的url地址 $status 狀態碼 $http_referer 從哪一個站點跳轉到該站點的(直接訪問該項爲-) $http_user_agent 訪問方式(經過XX瀏覽器,或curl方式訪問)
將內容添加到log_format xxxxx(自定義名字) 後面,最後以;結束。html
將日誌格式應用到test.com這個站點上mysql
vim /usr/local/nginx/conf/vhost/test.com.conf 在最後一個}前面添加這一行,/tmp/test.com.log是咱們自定義的路徑和文件名,comeon是咱們前面定義的日誌格式的名字。access_log /tmp/test.com.log comeon;(結尾這個;不能少,少了報錯)
驗證並從新加載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
使用瀏覽器和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
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。
這個腳本是須要配合任務計劃cron使用的。緩存
驗證,運行腳本
[root[@localhost](https://my.oschina.net/u/570656) tmp]# sh -x /usr/local/sbin/nginx_log_rotate.sh
查看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下已經生成了以日期結尾的日誌文件
建立任務計劃
[root[@localhost](https://my.oschina.net/u/570656) tmp]# crontab -e 0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
天天凌晨零點自動切割日誌。
一個網站裏可能包含不少靜態文件,好比jpg,png,gif,js,css等,若是每個訪問都記錄日誌的話,日誌文件會瘋狂增加,這就須要配置靜態文件不記錄日誌了。而jpg,gif等每每文件很大,若是每一次訪問都要從服務器上下載的話會很佔用帶寬,咱們能夠經過延長它們的過時時間來下降帶寬的佔用,讓這些靜態文件在客戶瀏覽器中保存的時間延長。
配置內容以下:
location ~.*\.(jpg|gif|png|jpeg|bmp|swf)$ //指定文件類型 { expires 7d; //會在客戶瀏覽器中緩存7天 access_log off; //不記錄日誌 } location ~.*\.(js|css)$ { expires 12h; //在客戶瀏覽器中緩存12小時 access_log off; }
驗證 使用瀏覽器和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的訪問。 在實際生產環境中,這樣能夠大大下降日誌文件的增加速度和服務器帶寬的使用狀況。