我正在尝试关闭 laravel 应用程序中单个 url 的 access_log。
该网址是/ignore/this/url
我需要它简单地 - 对于这个 URL - 不要在 access_log 中记录信息,但我希望它能够像正常情况下那样被解析和运行。
正常的是:
server {
listen 80;
server_name localhost 127.0.0.1;
access_log /vagrant/logs/access.log;
error_log /vagrant/logs/error.log;
client_max_body_size 32M;
location / {
root /vagrant/web;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$args;
location ~ \.php {
fastcgi_pass unix:///var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 60;
}
}
}
我试过了:
location /ignore/this/url {
root /vagrant/web;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$args;
access_log off;
location ~ \.php {
fastcgi_pass unix:///var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 60;
}
}
但这一点似乎被忽略了。
我已尝试将其添加到主位置块内。
location / {
root /vagrant/web;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$args;
location /ignore/this/url {
access_log off;
}
location ~ \.php {
fastcgi_pass unix:///var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 60;
}
}
但它会给我一个 404 错误“未找到文件”。
答案1
http {
map $uri $do_log {
/ignore/this/url 0;
default 1;
}
server {
...
access_log /var/log/nginx/nginx-access.log combined if=$do_log;
}
}
答案2
万一对任何人都有用...接受的答案适用于我尝试的任何静态 url,但我的$uri
变量每次都以 index.php 的形式出现在我的大多数 PHP 文件中,因为 URL 被重写,原因是
try_files /index.php?$args;
最后,我不得不对已接受的答案进行以下修改才能使其正常工作:
http {
map $request $do_log {
'GET /ignore/this/url HTTP/1.1' 0;
default 1;
}
server {
...
access_log /var/log/nginx/nginx-access.log combined if=$do_log;
}
}
https://docs.nginx.com/nginx/admin-guide/monitoring/logging/