将 nginx 中的 limit_req_zone 日志分开

将 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。

答案1

我完全不明白这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)使用两个指令,但日志级别不同。

答案2

我做过一些类似的东西:

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;

将在稳定版中实现,将更容易将此类错误分离到单独的文件中。

相关内容