如何在nginx中禁用日志记录图片但仍允许get请求?

8

我想在nginx的access_log日志中仅记录javascript文件的请求。我尝试使用在此网站上找到的以下代码:

location ~* ^.+.(jpg|jpeg|gif|css|png|html|htm|ico|xml|svg)$ {
   access_log        off;
}

问题是它根本不允许Get请求,当我尝试在浏览器中运行执行JS文件的HTML文件时,会出现404错误。 我希望一切都能正常工作,但是访问日志仅记录JS文件的请求。 我该怎么做?
2个回答

15
将其放在服务器块中,并确保“root”正确设置。它可以工作。
工作示例:
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires    +60d;
    access_log off;
}

我将此放在服务器块中,而不是位置块中。


2
我按照你的建议做了: server { listen 80; server_name X.XXX.XXX.XX; location / { root html/run; index index.html index.htm; } location ~* .(css|png|jpg|jpeg|gif|ico|html)$ { access_log off; }}但它完全阻止了对文件的访问。 我做错了什么? - michael
你是否意味着让它像这样保持空白: location ~* .(js|css|png|jpg|jpeg|gif|ico)$ { } ? 但是这种方式行不通。 页面无法加载(404)。 - michael
不,直接把它删掉。我只是想找出问题出在哪里。如果你把它删除并重新加载nginx,你能查看图片吗? - Olafur Tryggvason
1
可以的。那是最初的设置。 - michael

1

或者,您可以将所有请求保持在单个location中,但使用带有条件if运算符的access_log来禁用图像记录:

map $request_uri $is_loggable {
    ~* ^.+\.(jpg|jpeg|gif|css|png|html|htm|ico|xml|svg)$ 0;
    default                                             1;
}
server {
    location / {
        access_log /path/to/log/file combined if=$is_loggable;
        ...
    }
}

这里的“combined”是默认日志格式的名称。
您说您只想记录JavaScript文件,所以实际上您可以使用更简单的解决方案:
map $request_uri $is_loggable {
    ~* ^.+\.js$  1;
    default      0;
}

对我没用,nginx语法错误:nginx:[emerg]映射参数无效 - AWS PS
只需要引用第一个参数来调整地图:map $request_uri $is_loggable { default 1; '~*^.+\.(jpg|jpeg|gif|css|png|html|htm|ico|xml|svg|js|map|woff|woff2)$' 0; } - Marlon Anjos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接