문제

동일한 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]);

내 문제를 해결하기 위해 세 가지 아이디어가 있습니다.

  1. 각 서버에 있는 구성 파일의 PHP 변수에 각 서버의 IP 주소를 하드코딩할 수도 있습니다.
  2. 나는 역방향 프록시 Apache용 전달 모듈 추가 (mod_rpaf).
  3. 나는 proxy_pass 각 서버에 가서 XXX.XXX.XXX.XXX:8880 그리고 YYY.YYY.YYY.YYY:8880 오히려 localhost?

실제로 로드되는 서버별 구성과 서버 ID가 내부에 있어야 합니다.모든 시스템은 다르게 동작하고 IP 주소로 이동하며 호스트 이름은 확실히 오류에 매우 취약합니다.일반적으로 서버에는 많은 응용 프로그램이 있으며 더 이상 작동하지 않을 수 있으며 디버깅하는 데 어려움을 겪을 수 있습니다. 예를 들어 some1은 메일이 더 이상 스팸 메일을 받지 않도록 역방향 항목을 설정하는 좋은 아이디어를 얻습니까? )

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top