標籤(空格分隔): Nginx 調試 Debuging 配置html
注:該文原文是 Debugging Nginx Configurationnginx
默認,Nginx 僅僅記錄標準錯誤日誌到 Nginx 默認的 error 文件中,或是被 error_log
指令指定的文件中。git
咱們能夠控制許多方面的錯誤日誌,這將幫助咱們調試咱們 Nginx 配置文件。github
重要:對於 Nginx 配置文件的任何改變,你都必須測試和重載 Nginx 的配置文件來讓變動生效。在 Ubuntu 系統,你能夠簡單的運行 nginx -t && service nginx reload
命令。服務器
在你複製粘貼任何 Nginx 配置以前,確保你移除了你不想要的代碼。而且,每次你升級 Nginx,也請使用最新版 Nginx 提供的更新你的配置文件。學習
在咱們開始以前,請詳細閱讀這些官方文章:一般的 Nginx 陷阱,if 是惡魔,location 指令和 Nginx 請求過程。你可能會單獨使用它們來解決你的問題。測試
注:5 星推薦上面的幾篇官方文章。網站
好吧,看起來你須要一些嚴謹的調試,讓咱們開始!google
大部分時間,你僅僅須要這個,特別是當你看見 404 或是否是指望的頁面的時候。lua
server { #other config error_log /var/logs/nginx/example.com.error.log; rewrite_log on; #other config }
rewrite_log
僅僅是一個標誌。當打開它,它將發送全部的 rewrite 相關的日誌信息到 error_log
文件中,使用 [notice]
級別。
所以,一旦你打開了它,在 error_log
中查看日誌信息。
下面的示例增長了 debug
級別,記錄在指定的路徑。
server { #other config error_log /var/logs/nginx/example.com.error.log debug; #other config }
debug
將記錄最大的消息。你能夠在這裏看到其餘值
注意:在一個高流量的網站,不要忘記恢復 error_log 日誌的調試級別,error_log 可能會吃光你全部的可用磁盤空間,並引發服務器 crash。
當你設置日誌級別成 debug
,若是你在調試一個在線的高流量網站的話,你的錯誤日誌可能會記錄每一個請求的不少消息,這樣會變得毫無心義。
爲了促使 Nginx 記錄僅僅來自於你的 IP 的錯誤日誌,添加如下行到配置文件 /etc/nginx/nginx.conf
的 events{..}
。
確保使用你本身的公網 IP 替換 1.2.3.4
,你能夠在這裏找到你的公網 IP。
events { debug_connection 1.2.3.4; }
你能夠在這裏查看更多的細節。
在 Nginx 中,咱們使用 location{..}
。
爲了調試一個應用的部分,你能夠在一個或多個 location{..}
中指定 error_log
指令。
server { #other config error_log /var/logs/nginx/example.com.error.log; location /admin/ { error_log /var/logs/nginx/admin-error.log debug; } #other config }
以上將僅僅調試你應用的 /admin/
部分,錯誤日誌將被記錄到一個不一樣的文件中。
你能夠組合使用 debug_connection
和 error_log
來獲取更多的控制調試日誌。
HttpEchoModule 是一個獨立的 Nginx 模塊,它能夠幫助你徹底以不一樣的方式調試。這個模塊默認沒有被 Nginx 綁定。
你須要從新編譯 Nginx 來使用這個模塊。對於 Ubuntu 用戶,這是一個快速啓動倉庫。
我最近在使用它,我還用它來調試項目。當我作完的時候,我將寫一篇文章詳細講述。
若是你仍然有困難的時間,而且你按期配置你的 Nginx,應該考慮使用其餘語言來處理你的 Nginx 配置。
這裏有關於 Perl 語言 和 Lua 語言的 Nginx 模塊。
我很是不善於學習新的語言,不會有太多的機會寫更多關於這方面的東西,可是若是你知道或是能夠很是容易學習 Perl/Lua,這會很是有趣。
擴展閱讀