- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認(rèn)證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
Nginx 主要支持兩種類型的日志:
訪問日志 (Access Logs):記錄每個 HTTP 請求的詳細(xì)信息。
錯誤日志 (Error Logs):記錄服務(wù)器運行過程中遇到的錯誤信息。
默認(rèn)情況下,Nginx 的日志文件通常位于 /var/log/nginx/
目錄下,但你可以在配置文件中自定義日志的位置和格式。
全局配置:在 http
或 main
塊中設(shè)置全局的日志路徑:
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
虛擬主機配置:你也可以在每個 server
塊中為不同的虛擬主機指定單獨的日志文件:
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
你可以自定義訪問日志的格式,以包含更多或更少的信息。常用的日志格式定義如下:
默認(rèn)格式:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
自定義格式:例如,添加客戶端 IP 和請求時間戳到日志中:
log_format custom '$remote_addr - $remote_user [$time_local] '
'client:$http_x_real_ip, request_time:$request_time '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
然后在需要的地方使用這個自定義格式:
access_log /var/log/nginx/access.log custom;
為了防止日志文件過大影響性能,通常會配置日志輪轉(zhuǎn)策略。Linux 系統(tǒng)中常見的日志輪轉(zhuǎn)工具是 logrotate
。
配置 logrotate
:創(chuàng)建或編輯 /etc/logrotate.d/nginx
文件來配置日志輪轉(zhuǎn)規(guī)則:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
/etc/logrotate.d/nginx
文件用于配置 Nginx 日志的輪轉(zhuǎn)策略,確保日志文件不會無限增長,并且可以通過壓縮和歸檔來節(jié)省磁盤空間。
路徑匹配
/var/log/nginx/*.log
:指定要輪轉(zhuǎn)的日志文件模式。這里的 *.log
表示所有擴展名為 .log
的文件,即包括訪問日志(access.log
)和錯誤日志(error.log
)。
daily
:表示每天進(jìn)行一次日志輪轉(zhuǎn)。你可以根據(jù)需要更改為 weekly
或 monthly
。
missingok
:如果指定的日志文件不存在,不報錯并繼續(xù)執(zhí)行其他操作。這在日志文件可能被刪除或重命名的情況下非常有用。
rotate 14
:保留最近 14 次的日志文件副本。舊的日志文件會被刪除以釋放磁盤空間。你可以根據(jù)實際需求調(diào)整這個數(shù)字。
compress
:對輪轉(zhuǎn)后的舊日志文件進(jìn)行壓縮(通常使用 gzip)。這有助于減少磁盤占用。
delaycompress
:延遲壓縮,即在下一次輪轉(zhuǎn)時才壓縮上一次輪轉(zhuǎn)的日志文件。這確保了當(dāng)前的日志文件不會立即被壓縮,方便實時查看。
notifempty
:如果日志文件為空,則不進(jìn)行輪轉(zhuǎn)。這避免了創(chuàng)建不必要的空日志文件。
create 0640 www-data adm
:創(chuàng)建新的日志文件時,設(shè)置其權(quán)限為 0640
(讀寫權(quán)限僅限于文件所有者和組),文件所有者為 www-data
,所屬組為 adm
。這對于確保日志文件的安全性和可訪問性非常重要。
sharedscripts
:如果多個日志文件匹配相同的配置規(guī)則,那么 postrotate
和 endscript
中的腳本只會運行一次。這對于避免重復(fù)執(zhí)行命令很有幫助。
postrotate ... endscript
:這部分定義了在每次日志輪轉(zhuǎn)之后要執(zhí)行的命令。具體來說:
if [ -f /var/run/nginx.pid ]; then
:檢查是否存在 Nginx 主進(jìn)程的 PID 文件。
kill -USR1 \\
cat /var/run/nginx.pid\\`:向 Nginx 發(fā)送
USR1` 信號,指示它重新打開日志文件,從而開始寫入新的日志文件。這是確保日志輪轉(zhuǎn)生效的關(guān)鍵步驟。
假設(shè)今天是 2024 年 12 月 30 日,Nginx 日志輪轉(zhuǎn)會在午夜觸發(fā)。以下是具體的流程:
檢查和輪轉(zhuǎn):
如果 /var/log/nginx/access.log
和 /var/log/nginx/error.log
存在并且非空,則將它們重命名為帶有日期戳的文件,例如 access.log.1
和 error.log.1
。
壓縮舊日志:
昨天的日志文件(如 access.log.1
和 error.log.1
)會被壓縮成 .gz
格式,但今天的日志文件(如 access.log
和 error.log
)暫時不會被壓縮。
創(chuàng)建新日志文件:
創(chuàng)建新的 access.log
和 error.log
文件,并設(shè)置權(quán)限為 0640
,所有者為 www-data
,所屬組為 adm
。
通知 Nginx:
向 Nginx 發(fā)送 USR1
信號,讓其重新打開新的日志文件。
清理過期日志:
刪除超過 14 天的日志文件,以釋放磁盤空間。
實時查看日志:使用 tail
命令可以實時查看最新的日志條目:
tail -f /var/log/nginx/access.log
搜索特定內(nèi)容:使用 grep
或 awk
等工具查找特定的請求或錯誤:
grep "404" /var/log/nginx/access.log
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
使用日志分析工具:對于大規(guī)模日志分析,可以考慮使用專業(yè)的日志分析工具如 GoAccess、ELK Stack(Elasticsearch, Logstash, Kibana)、Graylog 等。
有時你需要更詳細(xì)的錯誤信息來解決問題??梢酝ㄟ^修改錯誤日志級別來啟用更詳細(xì)的日志輸出:
error_log /var/log/nginx/error.log debug;
這將使 Nginx 記錄更多的調(diào)試信息,但請注意,生產(chǎn)環(huán)境中應(yīng)避免長期使用 debug
級別,因為它會產(chǎn)生大量日志并可能影響性能。
總之,Nginx 日志是運維人員了解服務(wù)器運行狀態(tài)的關(guān)鍵窗口。通過合理配置日志,運用日志輪轉(zhuǎn)策略,熟練使用查看與分析工具,以及在必要時調(diào)整日志級別,我們能更高效地保障 Nginx 穩(wěn)定運行。藍(lán)隊云作為技術(shù)支持的堅實后盾,擁有豐富資源與工具,期待與大家攜手攻克更多技術(shù)難題,助力 Web 服務(wù)蓬勃發(fā)展。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP