Apache SSL-Conability VHOST يعيد عشوائي 400 طلب سيء
سؤال
لقد قمت بإعداد اثنين من VHosts محلية (HTTP و HTTPs الموقعة ذاتيا) لـ Billing.example.com ومحاولة في Firefox مع Firebug. HTTP VHOST الغرض فقط هو إعادة توجيه جميع الطلبات إلى HTTPS.
في كل مرة أطلب صفحة من HTTPS تقريبًا ، ملف أو ملفان مع الموارد المرتبطة (الصور ، JS ، CSS ، إلخ ...) وأحيانًا تُرجع صفحة PHP نفسها 400 طلب سيء في نافذة Firebug وقت طويل. عند النقر فوق رابط المشكلة في Firebug ، يتم تحميل الملف كما ينبغي. أيضًا ، يتغير الطلب السيئ أو لم يتم تحميل الملفات التي تم تحميلها في كل مرة أقوم فيها بتحميل صفحة.
أيه أفكار؟
الخادم: Ubuntu 10.04 ، Apache/2.2.14 مع mod_ssl
Vhosts:
Listen 80
<VirtualHost *:80>
ServerName billing.example.com
UseCanonicalName On
DocumentRoot /code/site/billing
...
RewriteEngine On
RewriteRule ^/(.*)$ https://billing.example.com/$1
</VirtualHost>
Listen 443
<VirtualHost *:443>
ServerName billing.example.com
UseCanonicalName On
DocumentRoot /code/site/billing
...
SSLEngine On
SSLCertificateFile /code/site/ssl/example.crt
SSLCertificateKeyFile /code/site/ssl/example.key
</VirtualHost>
REST هي إعدادات افتراضية من Ubuntu Apache2.
المحلول
كنت أواجه هذه المشكلة مع Apache 2.2.9 والترقية إلى Apache 2.2.22 حل المشكلة بالنسبة لي.
أود الحصول على 400 رموز استجابة عشوائية على بعض طلبات الصفحة. في بعض الأحيان الصور ، وأحيانًا تطلب أياكس. في بعض الأحيان ، ستكون الصفحة نفسها هي التي ستعيد 400 مع هذه الرسالة.
طلب سيئ المستعرض الخاص بك قد أرسل طلبًا بأن هذا الخادم لا يمكنه فهمه. طلب حقل رأس مفقود ":" فاصل. يعيش
لقد وجدت تقرير البساط التالي لذلك يبدو مرتبطًا. تم إصلاح الخطأ في Apache 2.2.15: https://bugzilla.redhat.com/show_bug.cgi؟id=652335
أعتقد أن هذا الخطأ هو سبب الكثير من الأخطاء العشوائية عند استخدام HTTPS: أرسل متصفحك طلبًا بأن هذا الخادم لا يمكنه فهم حقل رأس الطلب ":" فاصل ".
لذلك اعتقدت أنني سأحاول التحديث إلى أحدث Apache مع أحدث MOD_SSL - ويبدو أن ذلك يعمل.
نصائح أخرى
بالنسبة لجزء SSL ، قد ترغب في الدوران UseCanonicalName Off
بالنسبة للمضيفين الظاهريين ، من المحتمل أن تستخدم مجالًا مختلفًا عن الخادم الرئيسي وقد يتسبب ذلك في البحث عن ملفات خارج المضيف الظاهري.
للاكتمال في المنفذ 80 ، أود أن أضيف [r ، l] إلى إعادة التوجيه.
RewriteEngine On
RewriteRule ^/(.*) http://billing.example.com/$1 [L,R]