Как отключить лог nginx для одного роута в Laravel/Lumen приложении?

nginx, php-fpm, Lumen
Конфиг nginx:
upstream php {
  server  php-fpm:9000;
}
server {
    # ...
    root   /var/www/lumen/public;    
    try_files $uri $uri/ /index.php$is_args$args;
    # ...
    location ~ \.php$ {
      include fastcgi.conf;
      fastcgi_pass php;
    }
}


Хочется отключить логгинг запросов по одному роуту. ЧТо-то типа
location  /api/servertime {
  access_log off;
}

Но так перестаёт работает роут. Если добавить в него параметры fastcgi как для php – роут работает, но в логи по-прежнему всё попадает.

Пробовал ещё сделать вложенный location под php:
location ~ \.php$ {
  location  ~ ^/api/servertime$ { access_log off; }

Но тоже в логи всё по-прежнему попадает.

Как правильно?
  • Вопрос задан
  • 359 просмотров
Решения вопроса 1
@dodo512
location = /api/servertime {
    access_log off;
    rewrite ^ /index.php break;
    include fastcgi.conf;
    fastcgi_pass php;
}


Ещё вариант добавить условие в location ~ \.php$
location ~ \.php$ {
    if ($request_uri ~ "^/api/servertime") {
        access_log off;
    }
    include fastcgi.conf;
    fastcgi_pass php;
}


nginx.org/ru/docs/http/ngx_http_log_module.html#ac...
С версии 1.7.0 добавили возможность писать в лог по условию access_log путь [формат [if=условие]];
Запрос не будет записываться в лог, если результатом вычисления условия является “0” или пустая строка.
map $request_uri $loggable {
    default            1;
    ~^/api/servertime  0;
}
server {
    # ...
    root   /var/www/lumen/public;    
    try_files $uri $uri/ /index.php$is_args$args;
    # ...
    location ~ \.php$ {
      access_log /var/log/nginx/access.log combined if=$loggable;
      include fastcgi.conf;
      fastcgi_pass php;
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Zolg
location /api/servertime {
access_log off;

include fastcgi.conf;
fastcgi_pass php;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы