سؤال

أنا في عملية الترحيل من إعداد Django Fastcgi في Apache إلى واحد في LightPD.

على Apache، كنت أستخدم تكوين FCGI الموضح في مستندات Django. الجزء الأساسي هو إعادة كتابة جميع عناوين URL غير الثابت الخاصة بي لتكون /mysite.fcgi/$1:

RewriteRule ^/(.*)$ /mysite.fcgi/$1 [QSA,L]

ثم قم بإعادة توجيه جميع طلبات /mysite.fcgi for FastCGI:

<IfModule mod_fastcgi.c>
    FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000
</IfModule>

عمل الإعداد ل django. إذا، على سبيل المثال، ذهبت إلى http://www.mydomain.com/help/ وأنا طباعت {{ request.get_full_path }} في القالب، كانت النتيجة /help/ وبعد كانت الحياة جيدة وكانت سعيدا. ومع ذلك، فقد ركضت بعض المشكلات التي تجبرني على الانتقال إلى خادم الويب الذي يدعم المزيد من الاتصالات المتزامنة من Apache يمكن أن تعطيني.

بسرعة إلى الأمام إلى lightpd. تم تكوين كل شيء جيدا. أعد كتابة عناوين URL الخاصة بي مع mod_rewrite:

URL.Rewrite-بمجرد = ("^ (/ وسائط /.) $ "=>" $ 1 "،" ^ / favicon.ico $ "=>" /med/img/favicon/favicon.ico "،" ^ (/.) $ "=>" /mysite.fcgi.1 "،)

ولها Fastcgi Handling /mysite.fcgi:

   fastcgi.server = (
       "/mysite.fcgi" => (
           "main" => (
               "host" => "127.0.0.1",
               "port" => 8000,
               "check-local" => "disable",
           )
       ),
   )

الأشياء تعمل بشكل عام وتشغيل موقع Django الخاص بي بشكل جيد. ولكن عندما أذهب إلى http://www.mydomain.com/help/ وطباعة {{ request.get_full_path }} في القالب، والنتيجة هي /mysite.fcgi/help/ وبعد هذا يسبب بعض المشكلات.

في حين أن هذا لا يسبب مشاكل بشكل عام حيث يعمل موقع Django جيدا، فإنه يسبب مشكلات عند استخدام SSL. على وجه التحديد، أستخدم Sslmiddleware من "ستيفن زابل - sjzabel@gmail.com" من http://www.djangosnippets.org/snippets/240/ وبعد يعتمد هذا البرنامج على طلب الطلب.get_full_path، مما يؤدي إلى قيمة مختلفة تحت lighttpd مما فعلت تحت أباتشي. نفسه بالنسبة لطلب.path.

هل يمكن لأي شخص أن يقترح طريقة للخروج من هذه المشكلة؟ من الناحية المثالية، أود أن يحتوي LightTPD MOD_REWRITE على نفس السلوك مثل MOD_REWRITE تحت Apache. إذا لم يكن الأمر غير ممكن، أود إعداد Lightpd Fastcgi Django الذي سيكون متوافقا مع حزمة SSLMiddleware التي أستخدمها. بدلا من ذلك، يمكنني تغيير حزمة SSLMiddleware لتكون متوافقة مع الطريقة التي mod_rewrite من LightTPD إعادة كتابة عناوين URL.

من شأن هذه الإجابة جعل عيد ميلاد 30 رائع!

هل كانت مفيدة؟

المحلول

هل حاولت تحديد force_script_name إلى "" في settings.py. وأعد تشغيل خادم FastCGI؟

FORCE_SCRIPT_NAME=""

نصائح أخرى

يرى http://redmine.lighttpd.net/issues/show/729. إذا كنت تفضل إصلاحه في LightPD.

باختصار، قم بالترقية إلى 1.4.23 وإضافة "Fix-Root-ScriptName" => "تمكين" على تكوين FCGI.

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