这里我们有当前的 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;
将在稳定版中实现,将更容易将此类错误分离到单独的文件中。