PHP $_SERVER['SERVER_ADDR'] 변수는 항상 127.0.0.1을 반환합니다.
-
13-09-2020 - |
문제
동일한 PHP 웹앱(램프) 그리고 각 서버에서 약간 다른 코드를 실행하고 싶습니다(테스트 목적으로).나는 그것을 사용하기를 바랐다. $_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
업데이트...
이런!나는 고려를 소홀히했다. nginx 웹 서버 앞의 역방향 프록시.해당 웹 서버에 대한 모든 트래픽은 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]);
내 문제를 해결하기 위해 세 가지 아이디어가 있습니다.
- 각 서버에 있는 구성 파일의 PHP 변수에 각 서버의 IP 주소를 하드코딩할 수도 있습니다.
- 나는 역방향 프록시 Apache용 전달 모듈 추가 (mod_rpaf).
- 나는
proxy_pass
각 서버에 가서XXX.XXX.XXX.XXX:8880
그리고YYY.YYY.YYY.YYY:8880
오히려localhost
?
실제로 로드되는 서버별 구성과 서버 ID가 내부에 있어야 합니다.모든 시스템은 다르게 동작하고 IP 주소로 이동하며 호스트 이름은 확실히 오류에 매우 취약합니다.일반적으로 서버에는 많은 응용 프로그램이 있으며 더 이상 작동하지 않을 수 있으며 디버깅하는 데 어려움을 겪을 수 있습니다. 예를 들어 some1은 메일이 더 이상 스팸 메일을 받지 않도록 역방향 항목을 설정하는 좋은 아이디어를 얻습니까? )