# Bezpečná konfigurácia Apache pre PHP

> Apache pre PHP bezpečne nakonfigurovať: PHP-FPM cez mod_proxy_fcgi, AllowOverride None, ServerTokens, TraceEnable a LimitRequestBody správne nastaviť a overiť.

Zdroj: https://phpsos.de/sk/blog/apache-fuer-php-absichern/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** Ak chcete Apache pre PHP bezpečne nakonfigurovať, napojte PHP cez PHP-FPM a `mod_proxy_fcgi`, vypnite `.htaccess` pomocou `AllowOverride None` a nastavte `ServerTokens Prod`, `ServerSignature Off`, `TraceEnable Off` a `Options -Indexes`. `LimitRequestBody` prispôsobte hraniciam PHP, nepotrebné moduly vypnite. Konfigurácia nenahrádza aktualizáciu PHP, výrazne však zmenšuje útočnú plochu.

## Apache po PHP2Shell: viac než reštart

Prevádzkovatelia Apache boli v októbri 2026 pod zvláštnym tlakom. Tím PHP hodnotí riziko pri mod_php ako najvyššie, pretože tam bolo zneužitie predvedené ešte predtým, než vôbec beží kód aplikácie. Akútne kroky, teda záplatovanie a úplný reštart, opisuje stránka [Prečo mod_php nesie najvyššie riziko](https://phpsos.de/sk/php2shell/mod-php-risiko/).

Po záplate zostáva otázka, aká dobrá je samotná konfigurácia Apache. Narastené servery často nesú nastavenia z mnohých rokov: zoznamy adresárov, otvorené práva `.htaccess`, moduly, ktoré už nikto nepotrebuje. Každé z nich môže neskoršiu chybu zväčšiť viac, než by bolo nutné.

Tento príspevok opisuje štíhlu, bezpečnú základnú konfiguráciu pre Apache 2.4 s PHP-FPM. Príklady používajú cesty Debian a Ubuntu; v rodine RHEL ležia súbory pod `/etc/httpd/`.

## Napojenie PHP cez PHP-FPM namiesto mod_php

S PHP-FPM beží PHP vo vlastných procesoch, oddelene od webového servera. Apache odovzdáva požiadavky cez `mod_proxy_fcgi`. Podľa dokumentácie Apache má napojenie cez `SetHandler` oproti `ProxyPassMatch` výhodu: Apache najprv sám priradí požiadavku súboru v súborovom systéme a až potom ju odovzdá PHP-FPM.

```apache
<FilesMatch "\.php$">
    SetHandler "proxy:unix:/run/php/seite1.sock|fcgi://localhost/"
</FilesMatch>
```

Moduly aktivujete pod Debian a Ubuntu pomocou `a2enmod proxy_fcgi`. Kto prechádza z mod_php, deaktivuje modul PHP a následne prejde z MPM Prefork na MPM Event. Súvislosti k starému spôsobu prevádzky vysvetľuje [mod_php vysvetlený: PHP v procese Apache](https://phpsos.de/sk/php/mod-php-erklaert/).

Na strane PHP-FPM patrí `security.limit_extensions = .php` do každého poolu. Podľa príručky PHP FPM inak vykonáva aj súbory `.phar`.

## Apache bezpečne nakonfigurovať pre PHP: jadrové voľby

Niektoré nastavenia platia pre celý server a patria do samostatného konfiguračného súboru, napríklad `/etc/apache2/conf-available/haertung.conf`, aktivovaného pomocou `a2enconf haertung`.

```apache
# Skrátiť údaje o verzii (možné len na úrovni celého servera)
ServerTokens Prod
ServerSignature Off

# Vypnúť metódu TRACE
TraceEnable Off

# Zásadne nič neuvoľňovať, weby povoľovať cielene
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>
```

Nasledujúca tabuľka zaraďuje najdôležitejšie voľby. Štandardné hodnoty a účinok pochádzajú z dokumentácie Apache.

| Direktíva | Štandard | Odporúčanie | Prečo |
|---|---|---|---|
| `ServerTokens` | `Full` | `Prod` | hlavička `Server` uvádza len „Apache“ |
| `ServerSignature` | `Off` | `Off` | žiadny riadok s verziou pod chybovými stránkami |
| `TraceEnable` | `on` | `Off` | TRACE sa odmieta s 405 |
| `Options` | `FollowSymlinks` | `-Indexes`, symlinky len podľa vlastníka | žiadne zoznamy adresárov |
| `AllowOverride` | `None` | `None` | `.htaccess` sa nevyhodnocuje |
| `LimitRequestBody` | 1 GiB (od 2.4.54) | zodpovedajúce `post_max_size` | veľké požiadavky odmietať včas |

Dôležité pri `AllowOverride`: mnohé distribúcie a návody k CMS nastavujú pre webový koreň `AllowOverride All`. Tým môže každý súbor `.htaccess` meniť pravidlá prepisovania, handlery a pri mod_php dokonca nastavenia PHP. Útočník s právami zápisu v priečinku s uploadmi tam môže uložiť vlastný `.htaccess`. S `AllowOverride None` je táto cesta uzavretá.

## VirtualHost ako šablóna

Nasledujúci VirtualHost spája body pre jeden web. Cesty k certifikátom, socket a adresáre si prispôsobte. `mod_ssl` a `mod_headers` musia byť aktívne.

```apache
<VirtualHost *:443>
    ServerName www.example.de
    DocumentRoot /var/www/seite1/public

    SSLEngine on
    SSLCertificateFile    /etc/ssl/seite1/fullchain.pem
    SSLCertificateKeyFile /etc/ssl/seite1/privkey.pem

    <Directory /var/www/seite1/public>
        Options -Indexes +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/seite1.sock|fcgi://localhost/"
    </FilesMatch>

    # Zablokovať správu verzií a súbory prostredia
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, zodpovedá post_max_size = 32M
    LimitRequestBody 33554432

    Header unset X-Powered-By
    Header always unset X-Powered-By
</VirtualHost>
```

Dvojité `Header unset` nie je omyl. Podľa dokumentácie Apache pristanú hlavičky z `mod_proxy_fcgi` v inej internej tabuľke než hlavičky samotného servera; pomocou oboch variantov zachytíte oba prípady. Ďalšie hlavičky, ktoré aktívne chránia návštevníkov, opisuje sprievodca [Bezpečnostné hlavičky pre webové stránky](https://phpsos.de/sk/ratgeber/sicherheits-header/).

Priečinky s uploadmi a cache navyše potrebujú zákaz vykonávania. Ako nájdete a zablokujete všetky zapisovateľné priečinky, uvádza [Zákaz vykonávania PHP v priečinkoch s uploadmi](https://phpsos.de/sk/blog/php-in-uploads-verbieten/).

## Vyradiť moduly a overiť výsledok

Každý načítaný modul je kód, ktorý reaguje na požiadavky. Skontrolujte, ktoré moduly sú aktívne, a vypnite to, čo nepotrebujete. Typickí kandidáti sú `autoindex`, `status` bez obmedzenia prístupu, `cgi` a `userdir`.

```bash
# Zobraziť aktívne moduly
apachectl -M | sort
# Príklad Debian/Ubuntu: vypnúť modul zoznamov adresárov
sudo a2dismod autoindex
# Skontrolovať konfiguráciu a až potom znova načítať
sudo apachectl configtest && sudo systemctl reload apache2
# Test zvonka: TRACE má vrátiť 405, .git 403
curl -s -o /dev/null -w "%{http_code}\n" -X TRACE https://www.example.de/
curl -s -o /dev/null -w "%{http_code}\n" https://www.example.de/.git/HEAD
```

Osobitnú pozornosť si zaslúži `mod_status`. Stavová stránka ukazuje bežiace požiadavky s adresami a otváranými cestami. Ak ju potrebujete, obmedzte prístup pomocou `Require ip` na vaše správcovské siete. To isté platí pre stavové stránky PHP-FPM, ktoré sa sprístupnili cez Apache.

> **Dôležité:**
> `AllowOverride` neprestavujte bez prípravy. Najprv prevezmite pravidlá zo všetkých súborov `.htaccess` do VirtualHost a web otestujte na kópii. Inak po opätovnom načítaní prestanú fungovať presmerovania a pekné adresy URL.

Ako dodatočná vrstva pred aplikáciou môže byť zmysluplná vlastná Web Application Firewall; úvod opisuje [Nasadenie ModSecurity a OWASP Core Rule Set](https://phpsos.de/sk/blog/modsecurity-owasp-crs/).

## Záver: poriadok prekonáva jednotlivé opatrenie

Bezpečná konfigurácia Apache pre PHP pozostáva z niekoľkých dobre pochopených stavebných prvkov. PHP beží cez PHP-FPM oddelene od webového servera, `.htaccess` sa nevyhodnocuje, údaje o verzii a TRACE sú vypnuté, limity veľkosti zodpovedajú PHP a zapisovateľné priečinky nevykonávajú skripty. Žiadny z týchto bodov nie je sám osebe pôsobivý. Spolu zabezpečujú, že chyba na jednom mieste nevedie okamžite k prevzatiu servera.

Pre vedenie spoločnosti a zodpovedných za projekty je takmer dôležitejšia druhá vlastnosť: upratanú konfiguráciu možno sledovať. Ak sú všetky pravidlá vo VirtualHost namiesto roztrúsených v desiatkach súborov `.htaccess`, pri najbližšej kritickej zraniteľnosti sa dá rýchlo skontrolovať, ktorý web je ako napojený. V situácii ako v októbri 2026 to ušetrí práve ten čas, na ktorom záleží.

Prechod napriek tomu plánujte v pokoji a s testovacím prostredím. Unáhlená zmena z mod_php na PHP-FPM tesne pred víkendom skôr vytvára nové problémy, než ich rieši.

## Ako konkrétne pomáha PHP SOS?

- **Preveriť stav:** prečítame celú konfiguráciu Apache, všetky aktívne moduly a všetky súbory `.htaccess`.
- **Naplánovať prechod:** kde ešte beží mod_php, pripravíme prechod na PHP-FPM s vlastnými poolmi pre každý web.
- **Sprísniť konfiguráciu:** nastavíme jadrové voľby, pravidlá `.htaccess` prevezmeme do VirtualHost a zablokujeme zapisovateľné priečinky.
- **Testovať a dokumentovať:** po každej zmene weby preveríme zvonka a stav zaznamenáme v rámci [sprísnenia servera](https://phpsos.de/sk/leistungen/server-haertung/).


## Časté otázky

**Mal by som ešte používať mod_php?**  
Pre nové inštalácie odporúčame PHP-FPM cez mod_proxy_fcgi. Tím PHP hodnotí riziko PHP2Shell pri mod_php ako najvyššie. S PHP-FPM beží PHP oddelene od webového servera, s vlastnými používateľmi pre každý web a vlastnými hranicami.

**Prečo AllowOverride None, ak moje CMS potrebuje .htaccess?**  
Súbor .htaccess môže vytvoriť každý, kto smie zapisovať vo webovom koreni, aj votknutý kód. S AllowOverride None Apache takéto súbory nevyhodnocuje. Pravidlá vášho CMS potom jednorazovo prevezmete do VirtualHost. Je to trochu námahy, konfigurácia sa však stane zrozumiteľnou a rýchlejšou.

**Môžem ServerTokens nastaviť pre každý web inak?**  
Nie. Podľa dokumentácie Apache platí ServerTokens pre celý server a nedá sa meniť pre každý VirtualHost. Zároveň riadi údaj o verzii pod chybovými stránkami, ktorý zobrazuje ServerSignature.

**Akú štandardnú hodnotu má LimitRequestBody?**  
Od Apache 2.4.54 je štandard 1 GiB, vo verzii 2.4.53 a staršej bol neobmedzený. Hodnotu nastavte podľa post_max_size vo vašej konfigurácii PHP, aby sa príliš veľké požiadavky odmietli už vo webovom serveri.

## Zdroje

- [Apache: základné funkcie (core)](https://httpd.apache.org/docs/2.4/mod/core.html)
- [Apache: mod_proxy_fcgi](https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html)
- [Apache: mod_headers](https://httpd.apache.org/docs/2.4/mod/mod_headers.html)
- [php.net: bezpečnostné správy](https://www.php.net/)
