apache - 如何将 REMOTE_ADDR 设置为 HTTP_X_REAL_IP?

标签 apache nginx centos cpanel varnish

我尝试了很多方法将 REMOTE_ADDR(显示我的服务器 IP)设置为 HTTP_X_REAL_IP(显示访问者的 IP)。

我将 cPanel 与 Apache + NGINX + Varnish 一起使用。

REMOTE_ADDR 使用 NGINX + Varnish 获取实际访问者 IP 的最佳方法是什么?

谢谢!

最佳答案

假设 Internet -> NGINX -> Varnish -> Apache,不确定您拥有不同层的顺序是什么?

但是在每一层中,您必须显式转发客户端 IP 以确保您将其获取到 apache 层。
请注意,我将使用标准化的 X-Forwarded-For header 而不是 HTTP_X_REAL_IP

对于 Nginx

set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;

对于 Varnish
sub vcl_recv {
  # Add a unique header containing the client address    
 if (req.http.x-forwarded-for) {
   set req.http.X-Forwarded-For = req.http.X-Forwarded-For;
  } else {
   set req.http.X-Forwarded-For = client.ip;
  }
  # [...]
}

然后,您可以在 Apache 日志文件中检索 X-Forwarded-For header (包含 nginx 初始接收的原始客户端 IP)
%{X-Forwarded-For}i

关于apache - 如何将 REMOTE_ADDR 设置为 HTTP_X_REAL_IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329499/

相关文章:

nginx - 将项目文件放在 var/www 而不是 nginx/html

apache - 如何调试 Apache mod_rewrite

ubuntu - GitLab 更新后 Nginx 无法启动

http - Nginx 将 HTTP 重定向到 HTTPS 部分工作

linux - SMTP(500 Access Denied) 错误,但我可以将邮件发送到 gmail 或 hotmail

django - Rabbitmq celeryd celerybeat 不作为守护进程在生产中执行任务

php - 个人用户的网站速度变慢,但他们可以切换浏览器?

ruby-on-rails - Rails 3 + Passenger + Apache : How to change the port for SSL from 443 to 8443?

php - 如何测试 PHP 社交网络的可扩展性

nginx - 如何确定 FastCGI 读取、发送和连接超时的正确值?