Code前端首页关于Code前端联系我们

Nginx生产环境日志配置示例,保姆级别!

terry 2年前 (2023-09-28) 阅读数 66 #未命名

在企业级项目中,我们不仅需要完成业务模块的开发,还需要进行一些系统操作,记录系统运行状态或者客户端请求信息。帮助系统进行安全防护、系统升级等相关场景。今天我们来谈谈Nginx日志文件配置。

Nginx是一款高性能的Web服务软件,支持反向代理和文件流,应用广泛。在一些小型项目中,Nginx日志存储在文件中。查看信息请登录直播服务器查看。然而,当系统升级、规模变大时,比如分布式应用系统,你很难看到日志信息,因为你不知道某个请求落在哪个节点上。在这种情况下,最流行的这是使用 ELK 这样的系统来实现的。大致流程如下:

Nginx生产环境日志配置示例,保姆级!

与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源跳转urlhttps://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前端网发表,如需转载,请注明页面地址。

热门