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