![nginx 中的日志重定向](https://linux22.com/image/794526/nginx%20%E4%B8%AD%E7%9A%84%E6%97%A5%E5%BF%97%E9%87%8D%E5%AE%9A%E5%90%91.png)
我们使用 nginx 作为反向代理。
我们有一些正在逐步淘汰的旧主机名,我们希望生成对这些旧主机的请求日志,以便我们可以轻松识别仍在使用主机的地方(并且一年后,我们可以确信可以淘汰 DNS 条目等...而不会消除关键的生产依赖关系)。
已退休主机的 nginx 条目返回 301。
我已经向相关处理程序添加了一个 access_log 条目:
server {
listen 80;
server_name oldhost.example.com;
access_log /var/log/nginx/access-oldhost.log main;
return 301 $scheme://newhost.example.com$request_uri;
}
这会导致创建 /var/log/nginx/access-oldhost.log 文件 - 但是它是空的,即使我们点击旧 URL 并获取 301。
我已尝试将 access_log 行放在返回之前和之后。
我已将 log_subrequest on; 添加到 nginx.conf 的 http 部分:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_subrequest on;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format upstreamlog '[$time_local] - [$request_time ms/$upstream_response_time ms] - $proxy_add_x_forwarded_for <-> $scheme:$server_name [$status] <-> $upstream_addr [$upstream_status] : "$request" $http_referer';
access_log /var/log/nginx/access.log upstreamlog;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
server_tokens off;
#gzip on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
include /etc/nginx/conf.d/*.conf;
}
server{} 块位于 conf.d/*.conf 文件之一中。
在打开 log_subrequest 的情况下,我们仍然无法获得日志输出(到我们的主要访问日志或 access-oldhost.log 文件)。
希望有人能指出我做错的地方!
答案1
问题已解决。我的测试触及了错误的端点(令人尴尬的错误)。
让一切正常运行的魔法是log_subrequest on;