調試 Nginx 的配置

調試 Nginx 的配置

標籤(空格分隔): 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

僅僅調試 rewrite 規則

大部分時間,你僅僅須要這個,特別是當你看見 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 中查看日誌信息。

設置 Nginx 日誌的調試級別

下面的示例增長了 debug 級別,記錄在指定的路徑。

server {
        #other config
        error_log    /var/logs/nginx/example.com.error.log debug;
        #other config
}

debug 將記錄最大的消息。你能夠在這裏看到其餘值

注意:在一個高流量的網站,不要忘記恢復 error_log 日誌的調試級別,error_log 可能會吃光你全部的可用磁盤空間,並引發服務器 crash。

設置 Nginx 僅僅記錄來自於你的 IP 的錯誤

當你設置日誌級別成 debug,若是你在調試一個在線的高流量網站的話,你的錯誤日誌可能會記錄每一個請求的不少消息,這樣會變得毫無心義。

爲了促使 Nginx 記錄僅僅來自於你的 IP 的錯誤日誌,添加如下行到配置文件 /etc/nginx/nginx.confevents{..}

確保使用你本身的公網 IP 替換 1.2.3.4,你能夠在這裏找到你的公網 IP

events {
        debug_connection 1.2.3.4;
}

你能夠在這裏查看更多的細節

Nginx 的 Location 指定錯誤日誌

在 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_connectionerror_log 來獲取更多的控制調試日誌。

使用 Nginx 的 HttpEchoModule 模塊調試

HttpEchoModule 是一個獨立的 Nginx 模塊,它能夠幫助你徹底以不一樣的方式調試。這個模塊默認沒有被 Nginx 綁定。

你須要從新編譯 Nginx 來使用這個模塊。對於 Ubuntu 用戶,這是一個快速啓動倉庫

我最近在使用它,我還用它來調試項目。當我作完的時候,我將寫一篇文章詳細講述。

爲 Nginx 的配置使用 Perl/Lua 語言

若是你仍然有困難的時間,而且你按期配置你的 Nginx,應該考慮使用其餘語言來處理你的 Nginx 配置。

這裏有關於 Perl 語言Lua 語言的 Nginx 模塊。

我很是不善於學習新的語言,不會有太多的機會寫更多關於這方面的東西,可是若是你知道或是能夠很是容易學習 Perl/Lua,這會很是有趣。

擴展閱讀

  • How Nginx’s location-if works!
  • Maintaining, Optimizing & Debugging WordPress-Nginx Setup
相關文章
相關標籤/搜索