Отделить логи от limit_req_zone в nginx

Здесь у нас есть фрагмент текущей конфигурации 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 backend) к другому файлу журнала (скорее по умолчанию /var/log/nginx/error.log).

Да, в 1.3.15 появилась новая функция

limit_req_status xxx;

Но это было реализовано несколько дней назад в ветке trunc, и, похоже, не слишком помогает. Или я что-то упустил? Наличие nginx 1.2.7 атм.

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;
        }

Похоже, 503 генерируется limit_req. Так, когда особенность

limit_req_status xxx;

будет реализован в стабильном, будет проще разделить ошибки такого рода на отдельный файл.

Я не вижу как limit_req_status связано с вашим вопросом вообще - это не так.

Вы можете попробовать выполнить то, что вам нужно, с помощью следующих директив:

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

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

Вы бы поднять log_level для лимитных запросов, и будет указывать желаемый уровень журнала с error_log, Обратите внимание, что если вы сделаете это, вероятно, будут сброшены другие сообщения об ошибках Если это произойдет, и эффект нежелателен, то вы можете попробовать два error_log директивы на том же уровне (например, в том же location), с разными уровнями журнала.

Другие вопросы по тегам