0°

PHP获取Nginx代理后的客户端真实IP地址

我们通过Nginx代理PHP的时候,PHP默认没有开启访问日志,这个需要我们手动开启,开启之后默认记录的客户端地址是上层代理的IP,并不是客户端真实IP地址,这个时候就需要我们自定义PHP的日志格式来实现记录客户端的真实IP地址,不再废话了,直接上配置。

Nginx配置

1.Nginx通过FastCGI模块代理PHP

vim /usr/local/nginx/conf/nginx.conf
        location ~* \.php$ {
            root /usr/local/nginx/html;
            fastcgi_index   index.php;
            fastcgi_pass    127.0.0.1:9000;
            include         fastcgi_params;    #包含fastcgi_params文件
            fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        }

2.修改fastcgi_params文件
在fastcgi_params文件中加入我们自定义的文本及映射的Nginx内置变量

vim /usr/local/nginx/conf/fastcgi_params
fastcgi_param  X_FORWARDED_FOR $proxy_add_x_forwarded_for;

“X-Forwarded-For”客户端请求头字段,后面附加了$remote_addr变量,中间用逗号分隔.
如果”X-Forwarded-For”字段没有出现在客户端请求头中,那么$proxy_add_x_forwarded_for变量将等于$remote_addr变量。

3.重载Nginx

/usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx -s reload

PHP配置

1.开启access.log访问日志
将www.conf文件中的access.log参数前面的注释去掉,然后指定日志打印路径(路径必须真实存在,相对路径从php家目录开始)

vim /usr/local/php/etc/php-fpm.d/www.conf
access.log = var/log/$pool.access.log

2.定义日志访问格式
同样打开www.conf文件定位到 access.format 并取消前面的注释

vim /usr/local/php/etc/php-fpm.d/www.conf
access.format = "[%R] [%{X_FORWARDED_FOR}e] [%{user}C] [%u] [%t] [%d] [%{Content-Type}o] [%{X-Powered-By}o] [%m %r%Q%q] [%s] [%f] [%{mili}d] [%{kilo}M] [%C%%]"

以上是我定义的PHP日志格式,着重讲一下 %{X_FORWARDED_FOR}e, X_FORWARDED_FOR 为我们在Nginx fastcgi_params 文件中定义的文本,这里使用 %{X_FORWARDED_FOR}e 来进行变量调用。

有关PHP日志格式说明可以参考日志格式上面的解释:

3.定义完成后进行重启PHP

systemctl restart php-fpm

#然后确定php进程是否启动成功,如果启动失败,请看php启动日志
ps -ef|grep php-fpm

4.PHP日志

启动日志:/usr/local/php/var/log/php-fpm.log
访问日志:/usr/local/php/var/log/www.access.log

访问测试

重启成功后进行访问网站,然后查看PHP访问日志,以下图片可以看到,第二列为客户单的真实IP地址







「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论