在 Nginx 配置中,有时我们需要对某些特定文件(如 favicon.ico
或 robots.txt
)关闭访问日志(access_log
)和错误日志(error_log
)记录,以减少不必要的日志输出。
通常的做法是使用 location
指令匹配这些文件,并通过 access_log off
和 log_not_found off
来关闭日志记录。例如:
server {
# ...
# 主要路由配置
location / {
proxy_pass http://127.0.0.1:30021; # 前端项目
proxy_hide_header X-Powered-By;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
}
然而,这种配置方式存在一个问题:当访问 /favicon.ico
和 /robots.txt
时会直接返回 404 错误,因为这些文件应该通过代理服务器获取。
为了解决这个问题,我们可以使用命名位置(named location)@app
来复用代理配置:
server {
# ...
# 定义可复用的命名位置配置
location @app {
proxy_pass http://127.0.0.1:30021; # 将请求代理到本地 30021 端口
proxy_hide_header X-Powered-By; # 隐藏后端服务器信息,提高安全性
}
# 主要路由配置
location / {
proxy_pass http://127.0.0.1:30021; # frontend project
proxy_hide_header X-Powered-By;
try_files $uri @app; # 先尝试访问文件,如果不存在则代理到后端应用
}
location = /favicon.ico { access_log off; log_not_found off; }
# favicon.ico 处理
location = /favicon.ico {
access_log off; # 关闭访问日志
log_not_found off; # 关闭 404 错误日志
try_files $uri @app; # 本地不存在则从代理获取
}
location = /robots.txt { access_log off; log_not_found off; }
# robots.txt 处理
location = /robots.txt {
access_log off; # 关闭访问日志
log_not_found off; # 关闭 404 错误日志
try_files $uri @app; # 本地不存在则从代理获取
}
}
通过这种配置方式,不仅可以关闭这些文件的日志记录,还能确保它们能够正确地从代理服务器获取内容。