如何通过Nginx map配置屏蔽含socket.io的URL日志?
用Nginx的map指令屏蔽含socket.io的请求日志
实现方式
借助Nginx的map指令搭配正则表达式,就能匹配所有带socket.io的URL(不管后面跟着什么随机哈希),让这类请求不写入access_log。
具体配置步骤
- 在
http块里添加以下map规则:
map $request_uri $loggable { default 1; # 保留你已有的屏蔽规则:过滤/myapp/readiness路径 ~^/myapp/readiness$ 0; # 新增规则:匹配所有包含socket.io的请求路径,大小写不敏感 ~*socket.io 0; }
- 细节说明:
~*是不区分大小写的正则匹配,要是你需要严格区分大小写,换成~就行;这个规则会命中所有URI里带socket.io的请求,比如/socket.io/EIO=4/t=abc123、/api/socket.io/xyz这类带随机哈希的路径都能被过滤掉。
- 在你的
server块里,把access_log改成用这个变量控制:
server { # 其他server配置代码... access_log /var/log/nginx/access.log main if=$loggable; }
- 原理:当
$loggable的值是0时,该请求就不会写入日志;值为1时正常记录。
额外提示
- 要是你只想过滤以
socket.io开头的路径,把正则改成~^/socket.io就行; - 配置完记得用
nginx -t检查语法是否正确,没问题就用nginx -s reload让配置生效。
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

