Nginx
從 nginx 中的 limit_req_zone 中分離日誌
這裡我們有一塊目前的 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
)使用兩個具有不同日誌級別的指令。