代码之家  ›  专栏  ›  技术社区  ›  Tom

PHP$\u SERVER[SERVER\u ADDR]变量始终返回127.0.0.1

  •  3
  • Tom  · 技术社区  · 14 年前

    我们有多台负载平衡的web服务器机器运行同一个PHP webapp( LAMP )我想在每台服务器上运行稍微不同的代码( 用于测试目的 ). 我想用 $_SERVER['SERVER_ADDR']

    if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
      echo "Do one thing";
    } elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
      echo "Do something else";
    }
    

    $\u服务器['SERVER\u ADDR'] 到' $\u服务器['SERVER\u ADDR']

    我猜这个问题可能与 /etc/hosts

    127.0.0.1       localhost.localdomain localhost
    ::1             localhost6.localdomain6 localhost6
    XXX.XX.XX.XX    blahblah
    

    更新。。。

    哎呀 ! 我忘了考虑 nginx 在web服务器前面反向代理。由于nginx conf中的以下行,所有到这些web服务器的流量都来自nginx:

    location / {
        root                  /var/www/staging/current;
        proxy_pass            http://localhost:8880;
    }
    
    6 回复  |  直到 14 年前
        1
  •  5
  •   Kieran Allen    14 年前

    当然很简单

    $ip = getHostByName(php_uname('n')); 
    echo $ip;
    
        2
  •  4
  •   bobince    14 年前

    你最好根据机器之间的其他变化因素来切换。很好的选择是主机名:

    $host= php_uname('n');
    switch($host) {
        case 'webserver1':
            ...do one thing...
            break;
        case 'webserver2':
            ...do another thing...
            break;
        default:
            die('No configuration for unknown host '.$host);
    }
    
        3
  •  2
  •   Adam Lukaszczyk    14 年前

    反转/etc/hosts中的行

    XXX.XX.XX.XX    blahblah
    127.0.0.1       localhost.localdomain localhost
    ::1             localhost6.localdomain6 localhost6
    

    应该有用

        4
  •  1
  •   金馆长    7 年前

    用这个更准确!

    echo getHostByName($_SERVER[HTTP_HOST]);
    
        5
  •  0
  •   Tom    14 年前

    为了解决我的问题,我有3个想法:

    1. 我可以将每个服务器的IP地址硬编码到每个服务器上的配置文件中的一个PHP变量中。
    2. Apache的反向代理前向添加模块 ( mod_rpaf
    3. proxy_pass 在每个要转到的服务器上 XXX.XXX.XXX.XXX:8880 YYY.YYY.YYY.YYY:8880 localhost ?
        6
  •  0
  •   The Surrican    14 年前

    你真的应该有一个特定于som服务器的配置来加载,里面有一个服务器id。 每个系统的行为都不一样,对于ip地址,主机名肯定非常容易出错。通常,服务器上有许多应用程序,从一天到另一天,它可能不再工作,您将很难进行调试(例如,有人想出了一个好主意,设置一个反向条目,这样邮件就不会再收到垃圾邮件了?)