3

同じPHPWebアプリ(LAMP)を実行している複数の負荷分散されたWebサーバーマシンがあり、各サーバーでわずかに異なるコードを実行したいと思います(テスト目的で)。$_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";
}

$_SERVER['SERVER_ADDR']残念ながら、両方のマシンが「127.0.0.1 」に設定されているため、これは機能しません。$_SERVER['SERVER_ADDR']パブリックIPアドレスに設定されるように構成するにはどうすればよいですか?

この問題は何か関係があるのではないかと推測している/etc/hostsので、参照用に現在は次のようになっています。

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

アップデート...

おっと!Webサーバーの前でnginxリバースプロキシを検討することを怠りました。これらのWebサーバーへのすべてのトラフィックは、nginx confの次の行が原因で、nginxから到着します。

location / {
    root                  /var/www/staging/current;
    proxy_pass            http://localhost:8880;
}
4

6 に答える 6

5

確かにそれは同じくらい簡単です

$ip = getHostByName(php_uname('n')); 
echo $ip;
于 2010-07-09T14:08:10.637 に答える
4

おそらく、ロードバランサーがサーバーに接続する方法を変更する必要があります。これがどんなソフトウェアなのかわかりません。

マシン間で変化する他の要因に基づいて切り替える方がよい場合があります。良い賭けはホスト名です:

$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);
}
于 2010-07-08T11:37:53.483 に答える
2

/ etc/hostsの行を逆にします

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

動作するはずです

于 2010-07-08T11:06:13.690 に答える
1

これをより正確に使用してください!

echo getHostByName($_SERVER[HTTP_HOST]);
于 2018-01-20T11:21:16.970 に答える
0

私の問題を解決するために、私は3つのアイデアを持っています:

  1. 各サーバーのIPアドレスを、各サーバーにある構成ファイルのPHP変数にハードコードする場合があります。
  2. Apache用のリバースプロキシ追加転送モジュールmod_rpaf )を使用する場合があります。
  3. proxy_pass各サーバーでXXX.XXX.XXX.XXX:8880YYY.YYY.YYY.YYY:8880ではなくに移動するように変更する可能性がありlocalhostますか?
于 2010-07-09T13:32:36.120 に答える
0

ロードされるサーバー固有の構成とサーバーIDが実際に含まれている必要があります。すべてのシステムは異なる動作をし、IPアドレスを使用するため、ホスト名は間違いなく非常にエラーに対して脆弱です。通常、サーバーには多くのアプリケーションがあり、ある日から別のアプリケーションが機能しなくなり、デバッグに苦労する可能性があります(たとえば、メールがスパムされないように逆仕訳を設定するのは良い考えです。 )。

于 2010-08-28T16:30:16.707 に答える