Здесь у нас есть фрагмент текущей конфигурации 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 атм.
Я сделал такие:
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;
}
Похоже, 503 сгенерировано limit_req. Итак, когда функция
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
), с разными уровнями журнала.