Nginx

從 nginx 中的 limit_req_zone 中分離日誌

  • March 26, 2013

這裡我們有一塊目前的 nginx 配置:

limit_req_zone $binary_remote_addr zone=one:32m rate=2r/s;
limit_req zone=one burst=10;
error_page 500 501 502 503 504 =503 /offline.html;
location = /offline.html {
               root /path/to;
               add_header Cache-Control no-cache;
               add_header Retry-After 3600;
       }

有什麼方法可以將“觸發”limit_req 區域(例如,這會導致錯誤程式碼 503,也可能由 apache 後端引起)分離到另一個日誌文件(而不是預設的 /var/log/nginx/error.log)。

是的,1.3.15 中有新功能

limit_req_status xxx;

但它是幾天前在 trunc 分支中實現的,似乎幫不上什麼忙。或者我錯過了什麼?擁有 nginx 1.2.7 atm。

我做了一些這樣的:

limit_req_zone $binary_remote_addr zone=one:32m rate=2r/s;

error_page 500 501 502 504 =503 @offline50x;
error_page 503 =503 @offline503;
error_page 404 =503 @offline404;

server {
       listen 80;

       root /usr/share/nginx/html;
       index index.html index.htm;

       server_name localhost;

       location / {
               limit_req zone=one burst=10;
       }

       location @offline404 {
               access_log /tmp/404;
               try_files /offline.html =503;
       }

       location @offline50x {
               access_log /tmp/50x;
               try_files /offline.html =503;
       }

       location @offline503 {
               access_log /tmp/ddos;
               try_files /offline.html =503;
       }

看起來像由limit_req生成的503。所以當特徵

limit_req_status xxx;

將在穩定中實現,將這種錯誤分離到單獨的文件會更容易。

我根本看不出limit_req_status與您的問題有什麼關係——事實並非如此。

您可以嘗試使用以下指令完成您需要的操作:

http://nginx.org/en/docs/http/ngx_http_limit_req_module.html#limit_req_log_level

http://nginx.org/en/docs/ngx_core_module.html#error_log

您將log_level針對限制請求提高 ,並使用 指定所需的日誌級別error_log。請注意,如果您這樣做,它可能會丟棄其他錯誤消息。如果發生這種情況,並且效果不理想,那麼您可以嘗試error_log在同一級別(例如,在同一個location)使用兩個具有不同日誌級別的指令。

引用自:https://serverfault.com/questions/490442