代理IP地址通过Nginx Varnish Apache为WHMCS

时间:2015-04-13 16:58:05

标签: php apache nginx proxy varnish

在Ubuntu12.04.5 [访客> Nginx> SSL终止> Varnish3.0> Apache]上成功配置设置后,我安装了WHMCS并遇到错误,"页面未正确重定向&#34 ;

searching online之后我遵循了这些步骤..

所以我在我关注的服务器块中添加了以下行:

proxy_set_header X-Forwarded-Protocol $scheme;

然后我在.htaccess文件中添加了以下行:

if ($_SERVER['HTTPS'] !== on) {

SetEnvIf X-Forwarded-Protocol https HTTPS=on

一切顺利,停止了重定向,我可以通过https访问我的管理面板。

现在,在登录WHMCS管理面板时,我发现WHMCS中的IP跟踪显示登录页面上的访客IP为127.0.0.1。即使我已将以下行添加到我的nginx服务器块:

proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

然而,似乎IP没有被传递,WHMCS正在从端口80通过清漆选择代理127.0.0.1。

有人可以建议如何配置服务器,以便传递真正的IP&由Apache / WHMCS理解?

PS:我已经尝试但未能实施Real IP Module

我的nginx服务器块如下所示:


server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }
}

另外,我将PHP Info检入我的WMCS并找到以下内容:

Apache环境

HTTP_X_REAL_IP - 显示我的CloudFlare DNS IP

HTTP_CF_CONNECTING_IP - 显示我的真实IP

HTTP_X_FORWARDED_FOR - 显示三个IP,即我的真实IP,我的CloudFlare DNS IP,127.0.0.1

也许这可以帮助调查此事..

-

SV

3 个答案:

答案 0 :(得分:0)

搜索左和后是的,最终得到WHMCS Support&的答案。 CloudFlare Module

虽然我的CloudFlare模块仍无法正常工作,但我暂时能够通过在WHMCS安全设置中将所有CloudFlare IP添加到受信任代理列表来解决Real IP问题。

仍然不知道为什么mod_cloudflare无法为Apache服务器提供正确的IP :(

答案 1 :(得分:0)

将此代码添加到configuration.php:

Doctrine\Common

或尝试:

if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '') {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}

答案 2 :(得分:0)

我正在寻找一种解决方案,同时使用WHMCS和cloudflare保护..我已经尝试了很多解决方案..从未工作..

我真的要感谢Saurabh Vashist分享这个解决方案。在对WHMCS配置文件进行少量编辑之后:

if(isset($_SERVER['HTTP_CF_CONNECTING_IP']) && 
$_SERVER['HTTP_CF_CONNECTING_IP'] != '') {
$_SERVER["REMOTE_ADDR"] = $_SERVER['HTTP_CF_CONNECTING_IP'];
} else {
$_SERVER["REMOTE_ADDR"] = $_SERVER['REMOTE_ADDR'];
}

真正的访客IP现在又出现了..

非常感谢你们分享......