سؤال

لدينا العديد من أجهزة خادم الويب المتوازنة التي تعمل بنفس تطبيق الويب 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 بسبب السطر التالي في nginx conf:

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 أفكار:

  1. قد أقوم بترميز عنوان IP لكل خادم في متغير PHP في ملف التكوين الموجود لدينا على كل خادم.
  2. قد أستخدم الوكيل العكسي يضيف وحدة للأمام لـ Apache (mod_rpaf).
  3. قد أغير proxy_pass على كل خادم للذهاب إليه XXX.XXX.XXX.XXX:8880 و YYY.YYY.YYY.YYY:8880 بدلا من localhost?

يجب أن يكون لديك بالفعل تكوين خاص بخادم som والذي يتم تحميله ومعرف الخادم بداخله.سوف يتصرف كل نظام بشكل مختلف ويبحث عن عناوين IP، ومن المؤكد أن اسم المضيف معرض للخطأ للغاية.عادةً ما يكون هناك العديد من التطبيقات على الخادم ومن يوم لآخر قد لا يعمل بعد الآن وستجد صعوبة في تصحيح الأخطاء (على سبيل المثال، حصل شخص ما على فكرة جيدة لإعداد إدخال عكسي حتى لا تتعرض رسائل البريد الإلكتروني إلى رسائل غير مرغوب فيها بعد الآن؟ )

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top