编辑 /usr/local/nginx/conf/nginx.conf 配置文件:
log_format www.rootop.org '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; server { listen 80; server_name www.rootop.org; index index.html index.htm index.php; root /mnt/data/web/www.rootop.org; location ~ .*\.(php|php5)?$ { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fcgi.conf; } location ~ .*\.(js|css)?$ { expires 12h; } location ~* \.(jpg|gif|png|sh|zip|rar)$ { expires 30d; valid_referers none blocked *.rootop.org rootop.org; if ($invalid_referer) { rewrite ^/ http://imgs.rootop.org/images/denylink.jpg; } } access_log /var/logs/www.rootop.org.log www.rootop.org; }
相关说明解释
1.$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;
2.$remote_user :用来记录客户端用户名称;
3.$time_local : 用来记录访问时间与时区;
4.$request : 用来记录请求的url与http协议;
5.$status : 用来记录请求状态;成功是200,
6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
7.$http_referer :用来记录从那个页面链接访问过来的;
8.$http_user_agent :记录客户端浏览器的相关信息;
Nginx作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,就不能获取到客户端的真实IP地址。
原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。
通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是反向代理服务器在转发请求的HTTP头信息中,
可以增加X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。
这时候,就要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/2597.html