日志配置在/etc/nginx/nginx.conf中有log_format的配置。
nginx服务器日志相关指令有两条:一个是log_format 设置日志格式,另一个是access_log,记录接入日志状态,日志文件存放的路径,格式 和缓存大小。nginx.conf里的log_format的默认配置。
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
......
}
nginx日志变量格式如下:
$remote_addr #记录客户端的ip地址
$http_x_forwarded_for #记录的是客户端的IP地址以及经过的代理服务器的IP地址。如果客户端直接访问服务器,则$http_x_forwarded_for为空。
$server_addr #记录nginx的本机ip地址
$server_port #记录nginx配置文件中listen 里 配置的 端口 ----问题:怎么获取客户端的端口??
$server_name #记录客户端的域名
$remote_user #记录客户端的用户名
$time_local #通用的时间格式
$time_iso8601 #iso8601时间格式
$request #请求的方法和请求的HTTP协议
$status #请求状态码
$body_bytes_sent #服务器回应的字节数,不包含头部大小
$bytes_sent #服务器回应的总字节数
$msec #日志写入时间,单位为秒,精度为毫秒
$http_referer #记录链接访问源地址
$http_user_agent #记录客户端浏览器信息
$request_length #请求包的长度(请求头+请求正文)
$request_time #请求花费的时间,单位为秒,精度为毫秒
例如:
如果要在应用程序的日志中获取,需要在nginx配置中使用proxy_set_header指令将源头域名和端口号传递给后端应用程序。例如:
location / {
proxy_pass http://backend;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
问题:nginx.conf中 main配置日志中 '' "" 单引号与双引号区别:
只加单引号、只加双引号、单双引号都不加,效果一样,都可以打印$后的变量:'$server_addr' "$server_addr" $server_addr 打印结果是:127.9.45.23(两个变量会紧挨着打印,效果不好看)
单引号中加双引号、双引号中加单引号,效果类似,里层的引号,只是当做符号打印: ' "$server_addr" ' " '$server_addr' " 打印结果是: "127.9.45.23" '127.9.45.23'
如果增加多个变量,且想格式好看一点,建议一个大的单引号扩住多个双引号变量 或者 大的单引号扩住多个不加引号但是有空格的变量