Назад | Перейти на главную страницу

отдельные журналы из 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 слишком, например) в другой файл журнала (по умолчанию /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), с разными уровнями журнала.