Nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。
Nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:
Nginx内置变量大全
参数 | 说明 | 示例 |
$arg_PARAMENTER | 客户端GET请求PARAMENTER字段的值 | |
$args | 客户端请求中的参数 | |
$binary_remote_addr | 远程地址的二进制表示 | |
$body_bytes_sent |
已发送的消息体字节数大小 | 30023 |
$content_length | HTTP请求信息里的Content-Length字段 | 234112 |
$content_type | 请求信息里的Content-Type字段 | |
$cookie_COOKIE | 客户端请求中的COOKIE头域的值 | |
$document_root | 针对当前请求中的根路径设置值 | /index.php |
$document_uri | 与$uri相同 | |
$host | 请求信息中的Host头域值,如果请求中没有Host行,则等于设置的服务器名 | www.webloger.net |
$http_HEADER | HTTP请求信息里的HEADER字段 | |
$http_host | 与$host相同,但如果请求中没有Host行,则可能不用,请求地址,即浏览器中你输入的地址(IP或域名) | www.youcl.com 192.168.100.100 |
$http_cookie | 客户端的cookie信息 | |
$http_referer | url跳转来源 | https://www.baidu.com/ |
$http_user_agent | 用户终端浏览器等信息 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; GTB7.0; .NET4.0C; |
$http_via | 最后一个访问服务器IP的地址 | |
$http_x_forwarded_for | 相当于网络访问路径 | |
$is_args |
如果$args有值,则等于“?”;否则等于空 | |
$limit_rate | 对连接速率的限制 | |
$nginx_version | 当前Nginx服务器的版本 | |
$pid | 当前Nginx服务器主进程的进程ID | |
$query_string | 与$args相同 | |
$remote_addr | 客户端IP地址 | 211.28.65.253 |
$remote_port | 客户端端口号 | 80 |
$remote_user | 客户端用户名称,用户Auth Basic Module验证 | |
$request | 请求的URI和HTTP协议 | "GET /article-10000.html HTTP/1.1" |
$request_body |
客户端请求的报文体 | |
$request_body_file | 发往后端服务器的本地临时缓存文件的名称 | |
$request_filename | 当前请求的文件路径名,由root或alias指令与URI请求生成 | |
$request_method | 请求的方法,比如GET/POST等 | GET |
$request_uri | 请求的URI,带参数,不包含主机名 | /favicon.ico |
$request_time | 整个请求的总时间 | 0.205 |
$scheme | 所有的协议,如http或者https,比如:rewrite ^(.+)$$cheme://mysite.name$1 redirect; | http |
$send_http_cache_control | ||
$send_http_connection | ||
$send_http_content_length |
||
$send_http_content_type | ||
$send_http_keep_alive | ||
$send_http_last_modified |
||
$send_http_location | ||
$send_http_transfer_encoding | ||
$sever_addr |
服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(这样会造成资源浪费)$server_name请求达到的服务器名 | |
$server_port | 请求达到的服务器端口号 | |
$server_protocol | 请求的协议版本,HTTP/1.0或者HTTP/1.1,目前基本都是1.1了 | HTTP/1.1 |
$status | HTTP请求状态 | 200 |
$upstream_status | upstream状态 | 200 |
$time_local | 访问时间和时区 | 18/Jul/2012:17:00:01 +0800 |
$ssl_protocol | SSL协议版本 | TLSv1 |
$ssl_cipher | 交换数据中的算法 | RC4-SHA |
$upstream_addr | 后台upstream的地址,即真正提供服务的主机地址 | 10.10.10.100:80 |
$upstream_response_time | 请求过程中,upstream响应时间 | 0.002 |
$uri | 经过重定向之类的 |
举例说明如下:
1、配置文件
#vim /usr/local/nginx/conf/nginx.conf
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for ' '"$upstream_addr" "$upstream_status" "$upstream_response_time" "$request_time"';
include /usr/local/nginx/conf/vhost/*.conf;
2、vhost中配置文件
#vim /usr/local/nginx/conf/vhost/web.conf
server { listen 80 default; server_name www.it300.com; index index.html index.htm index.php; root /data/httpd/it300.com; location ~ .*\.php?$ { include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } access_log /data/logs/it300.com.log access; }