导航菜单
首页 >  » 正文

Nginx服务器日志配置

一、解决使用CDN记录真实用户IP

  1.修改配置文件位置

使用lnmp的服务器一般配置文件在:/usr/local/nginx/conf/nginx.conf,宝塔的配置文件发现有两个地方有nginx.conf配置文件:/www/server/nginx/conf/nginx.conf,/www/server/nginx/src/conf/nginx.conf。有效的配置文件是:/www/server/nginx/conf/nginx.conf,

在以下位置添加修改的配置:


其中需要注意的是log_format main,这里的main,需要在vhost中各站点的日志配置的地方要带上,表示使用这个配置,如图:


修改以上两个位置即可让配置生效。

2.参数配置

通过抓包可以看到,cdn节点在溯源请求服务器地址的时候会将用户客户端的ip带上,以X-Forwarded-For,CF-Connecting-IP两个参数的形式,如图:


如果客户端加一个x-forwarded-for参数来尝试篡改,实际上该参数会有两个ip,后面的一个ip永远是真实ip,前面是伪造的:“8.8.8.8,163.160.73.253”

所以在配置日志参数时,可以将X-Forwarded-For参数的值放到第一位,nginx模块中的变量为$http_x_forwarded_for,所以最终的格式为以下,其中保留了原始的$remote_addr,否则真实ip请求网站无法获取ip。

 log_format  main  '"$http_x_forwarded_for"-$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'; 

综合以上的配置,最终日志格式完美记录真实ip与cdn节点的ip:



二、开启nginx日志记录post参数

一般网站记录的日志只会记录get请求与post请求的url,而并不会记录post参数。服务器为了安全考虑默认不会开启post参数记录,因为参数中会包含一些用户名密码等信息。

1.修改nignx配置

默认配置如下:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '"$http_referer" $status $body_bytes_sent '
                '"$http_user_agent" "$http_x_forwarded_for"';

只需把$request_body参数加入记录信息中即可。

  log_format access '$remote_addr - $remote_user [$time_local] "$request" '
 '$status $body_bytes_sent $request_body "$http_referer" '
 '"$http_user_agent" $http_x_forwarded_for';
 access_log off;

改好后重启nignx。
日志如下:


0.201770s