PHP $ _SERVER ['server_addr']変数は常に127.0.0.1を返します
-
13-09-2020 - |
質問
同じPHP Webアプリケーションを実行している複数のロードバランスの取れたWebサーバーマシンがあります(ランプ)そして、私は各サーバー上でわずかに異なるコードを実行したい(テスト目的の)。私はこのような何かをするために$_SERVER['SERVER_ADDR']
Super Globalを使うことを望んでいました:
if ($_SERVER['SERVER_ADDR'] == 'XXX.XXX.XXX.XXX') {
echo "Do one thing";
} elseif ($_SERVER['SERVER_ADDR'] == 'YYY.YYY.YYY.YYY') {
echo "Do something else";
}
.
私は問題を推測しているかもしれません。これは現在次のように見えます:
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
XXX.XX.XX.XX blahblah
.
更新...
nginx リバースプロキシを検討することを怠った。これらのWebサーバーへのすべてのトラフィックは、nginx confの次の行のためにNGINXから到着します。location / {
root /var/www/staging/current;
proxy_pass http://localhost:8880;
}
. 解決
きっとそれは
のように単純なものです$ip = getHostByName(php_uname('n'));
echo $ip;
. 他のヒント
ロードバランサがサーバーにどのように接続するかを変更することがおそらく含まれます。私はこれがどのようなソフトウェアかわからない。
マシン間で変化する他の要因に基づいてスイッチを切るのが良いかもしれません。良い賭けはホスト名になります:
$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);
}
. / etc / hosts
の逆行XXX.XX.XX.XX blahblah
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
.
働くべき
これをより正確に使う!
echo getHostByName($_SERVER[HTTP_HOST]);
. 私の問題を解決するために、私は3つのアイデアを持っています:
- 各サーバーのIPアドレスを各サーバーに持っている設定ファイル内のPHP変数にハードコードします。
- apache のリバースプロキシアドーフォワードモジュールを使用することはあります( mod_rpaf )
- 各サーバー上の
proxy_pass
をXXX.XXX.XXX.XXX:8880
ではなくYYY.YYY.YYY.YYY:8880
とlocalhost
に変更することができますか?
ロードされるSOMサーバー固有の設定と内部のサーバーIDを持っている必要があります。 すべてのシステムは異なる動作をしてIPアドレスを備えていますが、ホスト名は間違いなく非常に誤って脆弱です。通常、サーバー上では多くのアプリケーションがあり、ある日から別のアプリケーションがありますが、それはもう機能しない可能性があり、あなたはハードタイムデバッグをするかもしれません(例えば、逆エントリを設定するのは素晴らしいアイデアをGETHSの良い考えを得ています。)
所属していません StackOverflow