我们在生产环境中使用以下nginx站点配置文件.
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
server {
root /srv/www/web;
server_name *.test.com;
access_log /var/log/nginx/xxx.test.com.access.log main;
Run Code Online (Sandbox Code Playgroud)
" http://a.test.com/ping "和" http://b.test.com/ping"http请求都将记录在文件xxx.test.com.access.log中.
但是有一个问题,nginx不会在xxx.test.com.access.log中存储"域名".
" http://a.test.com/ping "和" http://b.test.com/ping "共享相同的请求"Get/ping".
如何在nginx日志中记录"a.test.com"或"b.test.com"?
Tan*_*Tat 51
尝试$host在log_format中添加变量:
log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
Run Code Online (Sandbox Code Playgroud)
http://wiki.nginx.org/HttpCoreModule#.24host:
$主机
如果Host标头不可用,则此变量等于请求标头中的行Host或处理请求的服务器的名称.
在这种情况下,此变量可能与$ http_host具有不同的值:1)当Host输入头不存在或具有空值时,$ host等于server_name指令的值; 2)当Host的值包含端口号时,$ host不包含该端口号.自0.8.17起,$ host的值始终为小写.
Tim*_*ray 36
如果你想记录完整的请求网址,那么我的方法是
log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
'"$request_method $scheme://$host$request_uri $server_protocol" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $request_time';
Run Code Online (Sandbox Code Playgroud)
因此将$ request拆分为其组成部分并在中间弹出$ host.还可以让您查看请求是否为http是https.
| 归档时间: |
|
| 查看次数: |
44181 次 |
| 最近记录: |