Upload väčších súborov vo WP

Nedávno ma požiadal nemenovaný kamarát, či by som sa nepustil do aktualizácie jeho firemného webu. Zhodou okolností prvý a jediný web som mu vytváral v roku 2008 ja, tak som mu sľúbil, že sa do toho pustím. Keď som vytváral prvý web, tak som písal kód (html, css a php) ručne v editore geany. Samozrejme, že dnes by som sa určite nepustil do ručného písania kódu, keď existujú projekty ako Drupal, PHPFusion, alebo WordPress. Tým som ale nechcel povedať, že tieto projekty tu v roku 2008 neboli.

V predvolenom nastavení WordPress (WP) je upload súborov nastavený na 2MB. AK sa jedná o malý blog, alebo firemnú stránku, tak táto hodnota je dostačujúca. Ak potrebujeme na web nahrať väčší súbor ako 2MB, tak máme smolu. Návodov ako zväčšiť upload je mnoho, stačí zadať do vyhľadávača kľúčové slova a upload zväčšíme do niekoľkých minút.

predvolená hodnota uploadu

Dnes som potreboval hromadne na web nahrať obrázky z rôznou veľkosťou a zistil som, že väčšina obrázkov neprešla. Nahrávanie som vykonával v plugine Photo Gallery a WP vypísal chybu There has been a problem while trying to upload the following images. Please try to upload them again. Ďalej som zistil, že nefunguje nahratie súboru väčšieho ako 1MB (aj keď WP dovoľuje nahrať súbor do 2MB). Čo sa stalo ? Ako som uviedol vyššie, tak návodov na zväčšenie uploadu pre WP je na internete nespočetné množstvo. Keďže mám prístup k php, tak som zvolil možnosť úpravy uploadu priamo v php.

sudo nano /etc/php/7.3/apache2/php.ini

vyhľadáme si 3 smernice

upload_max_filesize = 2M
post_max_size = 8M
memory_limit = 128M

ktoré zmeníme na

upload_max_filesize = 32M
post_max_size = 64M
memory_limit = 128M

Po tejto zmene by sme mali byť schopný nahrať na WP súbor do 32MB. Keď som v administrácii WP prešiel na Multimédia (viď obrázok vyššie), tak som namiesto 2MB videl 32MB, ale nahrávanie stále nefungovalo (max. do 1MB). Skusil som teda (nie cez plugin) cez Multimédia nahrať súbor a dostal som odpoveď:

413 Request Entity Too Large
nginx/1.14.2

Všetky Apache2 backendy, ktoré bežia v linuxových kontajneroch sú za reverzným proxy serverom Nginx a problém je tam. Riešenie je jednoduché. Stačí v nginx konfigurácii pridať jednu smernicu, ktorá tento problém vyrieši. Čiže prihlásime sa cez ssh na reverzný proxy, editujeme konfiguračný súbor a znova načítame konfiguráciu nginx.

ssh name@192.168.1.10
sudo nano /etc/nginx/nginx.conf

do sekcie http pridáme túto smernicu

client_max_body_size 32M;
sudo systemctl reload nginx

Toto riešenie je globálne pre celý reverzný proxy server. Ak by sme chceli nastaviť veľkosť uploadovaných súborov pre konkrétny virtualhost, tak budeme editovať konfiguračný súbor pre konkrétny virtualhost, napr.

nano /etc/nginx/sites-available/www.domain.dyndns.net

V sekcii server je vnorená sekcia location do ktorej vložíme tú istú smernicu ako sme to robili v hlavnom konfiguráku nginx. Môže to vyzerať nejak takto (viď riadok 10).

server {
    server_name www.domain.dyndns.net;

    location / {
        proxy_pass http://192.168.1.10;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 32M;
    }

Samozrejme znova musíme načítať zmenu konfigurácie nginx servera

sudo systemctl reload nginx

Záver

Pri bežných serveroch bez reverzného proxy dokážeme zväčšiť upload pomocou php.ini ako som to spravil v tomto návode. Ďalšia možnosť je použiť .htaccess, alebo functions.php v aktuálnej WP téme. Ak je však pred backendami reverzný proxy, tak nám ani jedna z týchto možností nepomôže, lebo to bude blokovať reverzný proxy. Avšak aby nám to fungovalo, tak sa to musí nastaviť na oboch serveroch, tak ako som to popísal v tomto blogu.

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *