经常使用nginx,但是对nginx中的日志配置了解的不多,最近简单的学习了一下,在此简略的记录下。
nginx基础配置如下:
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;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;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
在此主要记录下 error_log和access_log。
error_log:
nginx配置中第三行“/var/log/nginx/error.log”表示nginx的error日志记录的地址配置,“notice”表示错误级别。
error_log的级别分为 debug, info, notice, warn, error, crit 我用的nginx版本为1.20.2,错误级别默认为notice。crit 记录的日志最少,而debug记录的日志最多。如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并没有看到有意义的信息,那么就可以调一下错误日志的级别,当你调成error级别时,错误日志记录的内容会更加丰富。
access_log:
配置中的access_log,记录的是nginx的访问日志,路径是“/var/log/nginx/access.log”,“main”是定义的格式名称,要和log_format后面的保持一致。
[例:log_format后面是"aaa",那么access_log最后面就得是"aaa"]
log_format用来设置日志格式,要注意log_format指令设置的名称在配置文件中是不能重复的。默认的这些参数代表的意义如下:
1.$remote_addr用于记录客户端IP地址;
2.$remote_user用于记录远程客户端用户名称;
3.$time_local用于记录访问时间与时区;
4.$request用于记录请求URL与HTTP协议内容;
5.$status用于记录请求状态,例:成功时状态为200;
6.$body_bytes_sent用于记录发送客户端的文件主体内容大小;
7.$http_referer用于记录是从哪个页面链接访问过来的;
8.$http_user_agent用于记录客户浏览器的相关信息。
9.$http_x_forwarded_for:X-Forwarded-For 是一个HTTP拓展头,起初在 RFC2616 (HTTP/1.1) 中并未定义,但后来被广泛用于表示客户端真实IP。后来在 RFC7239 (Forwarded HTTP Extension) 中又提供了标准的 Forwarded 头,使用 X-Forwarded-For 来提取真实IP,成了事实上的标准。
需要注意的是:X-Forwarded-For 存储了客户端IP以及请求链路上各代理IP,假设请求依次通过 proxy1、proxy2 后抵达服务,那 X-Forwarded-For 的值为:客户端IP, proxy1 IP, proxy2 IP,IP之间以逗号隔开。当使用 nginx 做反向代理时,通过 HttpServletRequest 的 getRemoteAddr() 得到的是最后一个代理所在机器的IP,而非客户端的真实IP。
我们可以对access_log做配置,记录更多的信息。可以参照nginx官方给出的access_log配置文档,里面有nginx支持的变量。http://nginx.org/en/docs/http/ngx_http_log_module.html#access_loghttp://nginx.org/en/docs/http/ngx_http_log_module.html#access_log
配置完毕后,先用
nginx -tc /etc/nginx/nginx.conf
检查下语法,没问题重载nginx服务
nginx -s reload