شرح - welcome to nginx مشكلة




nginx-client_max_body_size ليس له أي تأثير (6)

يبقى nginx يقول client intended to send too large body . أشار لي غوغلينغ و RTM إلى client_max_body_size . أنا وضعت على 200m في nginx.conf وكذلك في nginx.conf ، إعادة تشغيل Nginx بضع مرات ولكن ما زلت الحصول على رسالة الخطأ.

هل أغفلت شيئًا؟ الخلفية هي php-fpm max_post_size (يتم تعيين max_post_size و max_upload_file_size وفقًا لذلك).


إذا كنت تستخدم إصدار nginx من Windows ، فيمكنك محاولة إنهاء كل عملية nginx وإعادة تشغيله لترى. لقد واجهت نفس المشكلة في بيئتي ، ولكن حلها مع هذا الحل.


الرجاء معرفة ما إذا كنت تُعد توجيه client_max_body_size داخل كتلة http {} وليس داخل الموقع {}. لقد قمت بتعيينه داخل كتلة http {} ويعمل


تحتاج إلى تطبيق التغييرات التالية:

  1. قم بتحديث php.ini (ابحث عن ملف ini من phpinfo(); ) وقم بزيادة post_max_size و upload_max_filesize إلى الحجم الذي تريده:

    sed -i "s/post_max_size =.*/post_max_size = 200M/g" /etc/php5/fpm/php.ini
    sed -i "s/upload_max_filesize =.*/upload_max_filesize = 200M/g" /etc/php5/fpm/php.ini```
    
  2. قم بتحديث إعدادات NginX لموقعك على الويب وأضف قيمة client_max_body_size في موقعك أو http أو سياق server .

    location / {
        client_max_body_size 200m;
        ...
    }
    
  3. إعادة تشغيل NginX و PHP-FPM:

    service nginx restart
    service php5-fpm restart
    

ملاحظة: في وقت ما (في حالتي في كل مرة تقريبا) تحتاج إلى قتل عملية php-fpm إذا لم تحديث بواسطة خدمة الأمر بشكل صحيح. للقيام بذلك ، يمكنك الحصول على قائمة بالعمليات ( ps -elf | grep php-fpm ) واقتل واحداً تلو الآخر ( kill -9 12345 ) أو استخدم الأمر التالي للقيام بذلك نيابة عنك:

ps -elf | grep php-fpm | grep -v grep | awk '{ print $4 }' | xargs kill -9

تعمل تحميلات NGINX الكبيرة بنجاح على مواقع WordPress مستضافة ، أخيرًا (وفقًا للاقتراحات الواردة من nembleton & rjha94)

اعتقدت أنه قد يكون من المفيد لشخص ما ، إذا أضفت بعض الإيضاحات إلى اقتراحاتهم. بالنسبة للمبتدئين ، يرجى التأكد من أنك قمت بتضمين توجيه التحميل الخاص بك في كل ثلاث مجموعات تعريف منفصلة (الخادم والموقع و http). يجب أن يكون لكل منهما إدخال سطر منفصل. ستحب النتيجة شيئًا كهذا (حيث تعكس ... الخطوط الأخرى في فدرة التعريف):

http {
    ...
    client_max_body_size 200M;
}    

(في إعداد ISPconfig 3 الخاص بي ، توجد هذه الكتلة في الملف /etc/nginx/nginx.conf)

server {
    ...
    client_max_body_size 200M;
}

location / {
    ...
    client_max_body_size 200M;
} 

(في إعداد ISPconfig 3 الخاص بي ، توجد هذه الكتل في الملف /etc/nginx/conf.d/default.conf)

تأكد أيضًا من توافق ملف php.ini لخادمك مع إعدادات NGINX هذه. في حالتي ، قمت بتغيير الإعداد في قسم File_Uploads في php.ini ليصبح:

upload_max_filesize = 200M

ملاحظة: إذا كنت تدير إعداد ISPconfig 3 (الإعداد الخاص بي في CentOS 6.3 ، وفقًا لـ The Perfect Server ) ، فستحتاج إلى إدارة هذه الإدخالات في عدة ملفات منفصلة. إذا كان التكوين الخاص بك مشابهاً لواحد في الإعداد التفصيلي ، فإن ملفات NGINX conf التي تحتاج إلى تعديل موجودة هنا:

/etc/nginx/nginx.conf
/etc/nginx/conf.d/default.conf 

كان ملفي php.ini موجودًا هنا:

/etc/php.ini

تابعت التغاضي عن كتلة http في ملف nginx.conf. على ما يبدو ، فإن هذا الأمر قد أدى إلى الحد من التحميل إلى الحد الافتراضي 1M. بعد إجراء التغييرات المرتبطة ، ستحتاج أيضًا إلى التأكد من إعادة تشغيل خدمات NGINX و PHP FastCGI Process Manager (PHP-FPM). في التكوين أعلاه ، أستخدم الأوامر التالية:

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

كان نفس المشكلة التي تم تجاهل التوجيه client_max_body_size .

كان /etc/nginx/conf.d السخيفة ، أنني وضعت ملف داخل /etc/nginx/conf.d الذي لم ينته بـ .conf . لن تقوم Nginx بتحميل هذه بشكل افتراضي.


واعتبارًا من آذار 2016 ، واجهت هذه المشكلة في محاولة POST json على https (من طلبات python ، وليس أنها مهمة).

الحيلة هي وضع "client_max_body_size 200M؛" في مكانين على الأقل http {} server {} :

1. دليل http

  • عادة في /etc/nginx/nginx.conf

2. دليل server في vhost الخاص بك.

  • بالنسبة لمستخدمي Debian / Ubuntu الذين قاموا بالتثبيت عبر apt-get (ومديري حزم التوزيعات الآخرين الذين يقومون بتثبيت nginx مع vhosts بشكل افتراضي) ، thats /etc/nginx/sites-available/mysite.com ، لأولئك الذين ليس لديهم vhosts ، فمن المحتمل nginx.conf الخاص بك أو في نفس الدليل.

3. location / الدليل في نفس المكان مثل 2.

  • يمكنك أن تكون أكثر تحديدًا من / ، ولكن إذا لم يكن يعمل على الإطلاق ، فإنني أوصي بتطبيق هذا على / ثم بمجرد أن يكون عمله أكثر تحديدًا.

تذكر - إذا كانت لديك طبقة المقابس الآمنة ، فسيتطلب ذلك منك تعيين ما ورد أعلاه server SSL location أيضًا ، أينما كان ذلك (من الناحية المثالية تمامًا مثل 2 ). وجدت أنه في حالة محاولة العميل تحميله على http ، وكنت تتوقع أن يحصل على 301'd إلى https ، فسيقوم nginx فعليًا بإسقاط الاتصال قبل إعادة التوجيه نظرًا لأن الملف كبير جدًا بالنسبة لخادم http ، لذا يجب أن يكون في كليهما .

تشير التعليقات الأخيرة إلى أن هناك مشكلة في هذا على SSL مع إصدارات nginx أحدث ، ولكن أنا على 1.4.6 وكل شيء جيد :)





nginx