حل مشکل ۴۱۳ Request Entity Too Large در وردپرس و وب سرور Nginx

زمان مطالعه: 2 دقیقه

با سلام و درود، اخیرا اقدام به نصب وردپرس روی سرور شخصی خودم کردم و از پنل هاست هایی مثل Cpanel استفاده نکردم و در نتیجه خودم وب سرور Nginx رو روی یک ماشین برای بالا آوردن وردپرس اجرا کردم و به مشکل محدودیت آپلود وردپرس برخوردم.

از ارور های رایج وردپرس محدود بودن سایز آپلود هست که برای هاست های مثل Cpanel روش هاش کاملا مشخص و در دسترس هست، اما تو این مطلب برای حل مشکل مقدار حجم آپلود برای وب سرور Nginx و وردپرس در خدمت شما هستم.

قدم اول: کانفیگ کردن دسترسی های به دایکرتوری های وردپرس در سرور

اول ا همه مطمئن بشید که دایرکتوری که وردپرس در آن اجرا می شود، اجازه دسترسی به وب سرور Nginx جهت اجرا شدن را دارد. معمولا دایرکتوری root به صورت /var/www/ می باشد.

پس دستورات زیر را برای دسترسی کامل Nginx به دایرکتوری ها اجرا کنید:

sudo chown -R www-data:www-data /var/www/
sudo chmod -R 755 /var/www/

قدم دوم: تنظیم کرن تنظمات PHP-FPM

حال نوبت به تنظیم کردن PHP-FPMجهت اجازه دادن به آپلود فایل های بزرگ می رسد. به صورت پیش فرض محدودیت ها برای فایل های کوچک اعمال شده. روی اوبونتو فایل کانفیگ پیش فرض PHP-FPM در مسیر زیر می باشد:

/etc/php/7.x/fpm/php.ini

مقدار xبا توجه به نسخه PHPشما تغییر می کند.

پس این فایل را باز کنید و اقدام به ویرایش آن کنیم:

sudo nano /etc/php/7.2/fpm/php.ini

مقادیر زیر را تنظیم کنید و دخیره کنید:

memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 85M
file_uploads = On
max_execution_time = 600
max_input_time = 600

قدم سوم: تنظیم کانفیگ Nginx

حال نوبت به آن رسیده است که محدودیت های Nginxرا برداریم. روی سیستم عامل اوبونتو فایل کانفیگ Nginx در آدرس /etc/nginx/sites-available/default می باشد، با توجه به هر دامنه ممکن است این فایل کانفیگ فرق بکند. با توجه به مقادیر زیر، تغییرات را اعمال یا اضافه کنید (بین کامنت های add this line (by sadegh-khan.ir) ):

server {
    listen 80;
    listen [::]:80;
    root /var/www/html/wordpress;
    index index.php index.html index.htm;
    server_name example.com www.example.com;
    
  
    # add this line (by sadegh-khan.ir)
    client_max_body_size 100M;
    # add this line (by sadegh-khan.ir)

location / {
    try_files $uri $uri/ /index.php?$query_string;
   }

location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
  
      # add this line (by sadegh-khan.ir)
      fastcgi_connect_timeout 300s;
      fastcgi_read_timeout 300s;
      fastcgi_send_timeout 300s;
      # add this line (by sadegh-khan.ir)
  }
}

حال نوبت به ریاستارت nginx و php-fpm رسیده است.

sudo systemctl reload nginx.service
sudo systemctl reload php7.4-fpm.service

و تمام