دقایقی پیش از این که به حضور انور شما برسم با خطای internal server error در یکی از سایتهای سیپنلی مواجه شدم. البته خطا روی وبسایت نمایش داده نمیشد و از طریق کنسول گوگل کروم تونستم متوجه خطا بشم. حقیقتا اللهاکبر از خطاهایی که سعی در پنهان کردن خودشون دارن.
طبق معمول برای یافتن علت خطا به لاگها مراجعه کردم. لاگ آپاچی که از طریق دستور زیر در لینوکس عزیز قابل دسترسیه،
tail -n 100 /usr/local/apache/logs/error_log | grep farshid.xyz
(توضیح این که این دستور ده خط آخر ارورهایی که شامل دامنه farshid.xyz باشن رو نمایش می ده)
محتویاتی به شکل زیر داشت.
[Thu Apr 27 15:31:04.583784 2017] [:error] [pid 18952] [client client 192.168.1.1] ModSecurity: Output filter: Response body too large (over limit of 524288, total not specified). [hostname "farshid.xyz"] [uri "/index.php"] [unique_id "WQIAoC4E-zEAAEoIMGQAAAAN"] [Thu Apr 27 15:31:24.911419 2017] [:error] [pid 28573] [client client 192.168.1.1] ModSecurity: Output filter: Response body too large (over limit of 524288, total not specified). [hostname "farshid.xyz"] [uri "/index.php"] [unique_id "WQIAuy4E-zEAAG@dvQ4AAAAo"] [Thu Apr 27 15:33:05.909070 2017] [:error] [pid 27300] [client client 192.168.1.1] ModSecurity: Output filter: Response body too large (over limit of 524288, total not specified). [hostname "farshid.xyz"] [uri "/index.php"] [unique_id "WQIBIC4E-zEAAGqkQQAAAAAh"] [Thu Apr 27 15:33:19.736143 2017] [:error] [pid 28517] [client client 192.168.1.1] ModSecurity: Output filter: Response body too large (over limit of 524288, total not specified). [hostname "farshid.xyz"] [uri "/index.php"] [unique_id "WQIBLi4E-zEAAG9llW4AAAAY"] . . .
از متن خطا این نکته قابل استناده که همه بدبختیهای ابناء آدم زیر سر مود سکوریتیه و طول درخواست بیشتر از محدودیت مود سکوریتی ماست.
اما برای رفع این مشکل چه باید کرد؟ طبیعتا باید محدودیت طول درخواستها رو افزایش داد! خب این رو که خودمون بلدیم، عین کاندیدای اخیر ریاستجمهوری راهحل ارائه نکنید. دقیقا بفرمایید چطور باید این کار رو انجام داد؟ خیلی ساده. فایل کانفیگ مود سکوریتی با دستور زیر قابل دسترسی و ویرایشه
nano /usr/local/apache/conf/modsec2.conf
کافیه دو لاین زیر رو به فایل کانفیگ اضافه کنیم.
SecResponseBodyLimit 546870912 SecRequestBodyInMemoryLimit 546870912
پس از این تغییرات در نهایت محتویات فایل کانفیگ مود سکوریتی من به شکل این فایل شد.
سپس با اجرای دستور httpd -t و اطمینان از نبود ایراد روی سینتکس آپاچی، یکبار آپاچی رو ریستارت کردم تا برای همیشه از شر این مشکل در امان باشم.
آپدیت 18 اردیبهشت 1398:
ظاهرا کانفیگهای مودسکوریتی تغییر کرده و دیگه تو اون مسیر فایل کانفیگ نداره. در حال حاضر برای رفع این خطا به این شکل اقدام کنید.
فایل کانفیگ httpd رو از مسیر زیر ویرایش کنید.
/usr/local/apache/conf/httpd.conf
ویرچوال هاست مربوط به دامنه مشکل دار که با فرم <VirtualHost Domain/IP> شروع میشه رو پیدا کنید و کد زیر رو بهش اضافه کنید.
SecResponseBodyLimit 546870912
پس از ذخیره فایل سرویس httpd رو ریستارت کنید و از رفع خطا لذت ببرید.