Nginx生产环境日志配置示例,保姆级别!
在企业级项目中,我们不仅需要完成业务模块的开发,还需要进行一些系统操作,记录系统运行状态或者客户端请求信息。帮助系统进行安全防护、系统升级等相关场景。今天我们来谈谈Nginx日志文件配置。
Nginx是一款高性能的Web服务软件,支持反向代理和文件流,应用广泛。在一些小型项目中,Nginx日志存储在文件中。查看信息请登录直播服务器查看。然而,当系统升级、规模变大时,比如分布式应用系统,你很难看到日志信息,因为你不知道某个请求落在哪个节点上。在这种情况下,最流行的这是使用 ELK 这样的系统来实现的。大致流程如下:
![]()
与Nginx服务器日志相关的指令主要有两个:一是log_format,用于设置日志格式;二是log_format,用于设置日志格式。另一个是access_log,用于指定日志文件缓存的存储路径、格式和大小。您可以合并 ngx_http_log_module。一般情况下,日志配置在Nginx配置文件(/usr/local/nginx/conf/nginx.conf)中。指令
log_format 用于设置日志记录的格式。语法如下:
log_format name format {format ...}
其中 name 表示定义的格式的名称,format 表示定义的格式的样式。
log_format 有默认的合并日志格式设置,不需要设置,与 Apache 的合并日志格式类似。某些参数如下:
log_format combined '$remote_addr-$remote_user [$time_local]'
‘"$request"$status $body_bytes_sent’
‘"$http_referer" "$http_user_agent"’
还可以配置日志记录格式,但要知道 log_format 指令的设置名称不能在配置文件中重复。
假设Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理后面,则无法获取客户端的真实IP地址。原因是反向代理之后,在客户端和Web服务器之间增加了一个中间层,导致Web服务器无法直接获取客户端的IP。您通过 $remote_addr 变量获得的将是反向代理服务器的 IP 地址。
但是反向代理服务器可以在转发请求的HTTP头信息中添加X-Forwarded-For信息,记录原始客户端的IP地址和原始客户端请求的服务器地址。此时使用log_format命令设置日志格式,使日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。
例如创建名为mylogformat的日志格式,然后使用变量$http_x_forwarded_forlog_for来记录用户的X_Forwarded-For IP地址:
log_format mylogformat '$http_x_forwarded_for_$remote_user [$time_local]'
‘"$request"$status $body_bytes_sent’
‘"$http_referer" "$http_user_agent"’
在日志格式样式中,变量和http_x_forwarded_for用于记录IP地址。 ;
1。 $remote_user用于记录远程客户端的用户名;
2、$time_local用于记录访问时间和时区;
3、$request用于记录请求URL和HTTP协议;
4、$status用于记录请求的状态,例如成功时为status 200,找不到页面时为status 404;
5、$body_bytes_sent用于记录发送给客户端的文件内容的大小;
6、$http_referer用于记录从哪些页面链接访问;
7。 $http_user_agent用于记录客户浏览器的相关信息。
一般:log_format nginx 有许多可选参数来显示服务器活动状态。默认为:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
如果想记录更详细的信息,需要配置format_log。具体可设置的参数格式及说明如下:
| 参数 | 说明 | 示例 | |
|---|---|---|---|
| $remote_addr | 客户端地址 | 200 | |
| 2.5.5 $remote_user | 客户用户命名 - | ||
| $ WEY_LOCAL | 访问时间和时区 | 18 / Jul / 2012: 17: 00: 01 + 08 0800º $ 请求 uri 和 http 协议 | "GET /article- 10000.html HTTP /1.1" |
| $http_host | 请求地址,即您在浏览器中输入的地址(IP或域名) | www.wang.com 192.168.100.100 | |
| $status | HTTP请求状态 | 200 | |
| $upstream_status | 上游状态 | 200 | |
| $body_bytes_httpclient_content大小referer | 源跳转url | https://www.baidu.com/ | |
| $http_user_agent | 终端用户浏览器等信息 | 》Mozilla/4.0 | |
| $ssl_protocol协议TLSv1 | |||
| $ssl_cipher | 数据交换算法 | RC4-SHA | |
| $upstream_addr | 地址上游后台服务主机地址♺♺1.10.100:80 | ||
| $request_time | 所有请求总时间 | 0.205 | |
| $upstream_response_time | 上游请求处理过程中♺ ♺ ♷ |
以下包括在代理层LB nginx中使用的配置(在nginx.conf中配置):
log_format main '$remote_addr $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'$http_user_agent $http_x_forwarded_for $request_time $upstream_response_time $upstream_addr $upstream_status';
然后在nginx.conf文件或vhosts/*.conf文件中指定级别为主日志access_log。如下:
access_log logs/wiki_access.log main;
error_log logs/wiki_error.log;
重启nginx服务后生效。日志截取如下(从日志中可以看到agent的后端机器去哪个端口,开放访问状态的值等)。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网