# Ikkonfigura Nginx għal PHP b'mod sigur

> Ikkonfigura Nginx għal PHP b'mod sigur: agħti lil PHP-FPM biss skripts veri, ippermetti l-front controller, ibblokka dotfiles u ssettja limiti tad-daqs.

Sors: https://phpsos.de/mt/blog/nginx-fuer-php-absichern/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** Biex tikkonfigura Nginx għal PHP b'mod sigur, agħti lil PHP-FPM biss skripts li verament jeżistu, f'applikazzjonijiet b'front controller anke biss l-`index.php`. Magħhom jgħoddu dotfiles imblukkati bħal `.git` u `.env`, server standard għal ismijiet ta' host mhux magħrufa, limiti tad-daqs adattati u `security.limit_extensions = .php` fil-pool. Dan ma jipproteġix minn vulnerabbiltajiet f'PHP innifsu, imma jillimita dak li jista' jiġi eżegwit wara żball.

## L-aktar linji perikolużi jinsabu fil-PHP-location

Minn PHP2Shell ħafna timijiet jivverifikaw il-verżjonijiet u l-pools tal-PHP-FPM tagħhom, kif tiddeskrivi l-paġna [Issaħħaħ Nginx ma' PHP-FPM](https://phpsos.de/mt/server/nginx-php-fpm/), u wara l-aġġornament [jerġgħu jibdew il-workers kollha](https://phpsos.de/mt/php2shell/php-fpm-neustart/). It-tieni ħarsa tmur lejn il-konfigurazzjoni ta' Nginx innifsha. Hemmhekk jiġi deċiż liema fajls jiġu eżegwiti fil-fatt bħala PHP.

F'ħafna konfigurazzjonijiet hemm blokk li jgħaddi kull talba għal `.php` lil PHP-FPM, ikun fejn ikun il-fajl. Jekk fajl PHP introdott jispiċċa f'folder tal-upload, is-server jesegwih. Minn żball tal-fajls issir hekk backdoor.

Dan l-artikolu jikkonċentra fuq in-naħa ta' Nginx: liema direttivi jgħoddu, kif taħdem l-ordni tal-blokki location u kif tittestja r-riżultat.

## Kif Nginx jiddeċiedi liema blokk japplika

Min irid jikkonfigura Nginx għal PHP b'mod sigur irid jaf kif jintgħażlu l-blokki location. Skont id-dokumentazzjoni ta' Nginx, dan jimxi hekk:

1. Taqbila eżatta b'`location =` itemm it-tiftix minnufih.
2. Fost il-prefix-locations tinżamm l-itwal waħda li taqbel. Jekk għandha `^~`, ma jiġu vverifikati aktar espressjonijiet regolari.
3. Inkella l-espressjonijiet regolari (`~`, `~*`) jiġu vverifikati fl-ordni tal-fajl tal-konfigurazzjoni; l-ewwel taqbila tirbaħ.
4. Jekk l-ebda espressjoni regolari ma taqbel, tgħodd il-prefix-location mżomma.

Minn hawn jinqalgħu żewġ regoli prattiċi. Blokk għal PHP f'folders tal-upload jrid jinħoloq jew bħala prefiss `^~` jew bħala espressjoni regolari qabel il-blokk ġenerali ta' PHP. U prefix-location normali bħal `location /uploads/` ma tipproteġix, għax l-espressjoni regolari għal `.php` tegħlebha.

## Konfigurazzjoni bażika sigura

L-eżempju li ġej juri blokk server għal applikazzjoni b'front controller, kif komuni ma' Laravel, Symfony, Shopware 6 jew ħafna żviluppi proprji. Mogħdijiet, socket u ċertifikati tadattahom int.

```nginx
server {
    listen 443 ssl;
    server_name www.example.de;
    root /var/www/seite1/public;
    index index.php;

    ssl_certificate     /etc/ssl/seite1/fullchain.pem;
    ssl_certificate_key /etc/ssl/seite1/privkey.pem;

    server_tokens off;
    client_max_body_size 32m;

    # Ippermetti Let's Encrypt u mogħdijiet magħrufa oħra
    location ^~ /.well-known/ {
        try_files $uri =404;
    }

    # Ibblokka fajls u folders moħbija (.git, .env, .htaccess)
    location ~ /\. {
        deny all;
    }

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # Biss il-front controller jinbgħat lil PHP-FPM
    location = /index.php {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_hide_header X-Powered-By;
        fastcgi_pass unix:/run/php/seite1.sock;
    }

    # Kull fajl PHP ieħor ma jiġix eżegwit
    location ~ \.php$ {
        return 404;
    }
}
```

`$realpath_root` isolvi links simboliċi. Dan huwa importanti f'deployments b'symlink li jinbidel lejn ir-release attwali, biex PHP-FPM u OPcache jaraw il-mogħdija t-tajba. Innota wkoll: skont id-dokumentazzjoni ta' Nginx, direttivi `fastcgi_param` jintirtu minn livelli ogħla biss jekk fil-livell attwali ma jkun hemm l-ebda proprji. Għalhekk `include fastcgi_params;` jappartjeni fl-istess blokk.

CMS klassiċi bħal WordPress, TYPO3 jew Contao għandhom diversi punti tad-dħul. Hemmhekk issostitwixxi l-blokk tal-front controller b'PHP-location ġenerali li tgħaddi biss fajls li jeżistu (`try_files $uri =404;`), u ibblokka l-eżekuzzjoni f'kull folder li jista' jinkiteb. Kif dan jirnexxi jinsab taħt [Ipprojbixxi l-eżekuzzjoni ta' PHP f'folders tal-upload](https://phpsos.de/mt/blog/php-in-uploads-verbieten/).

## It-tieni protezzjoni f'PHP-FPM

Nginx jiddeċiedi x'jinbagħat 'il quddiem, PHP-FPM jiddeċiedi x'jesegwixxi. Skont il-manwal ta' PHP, PHP-FPM b'mod standard jesegwixxi fajls `.php` u `.phar` u hu stess jirrakkomanda li dan jiġi llimitat għal `.php`. Dan jaqbad żbalji ta' konfigurazzjoni fis-server tal-web.

```ini
; fil-pool, pereżempju /etc/php/8.3/fpm/pool.d/seite1.conf
security.limit_extensions = .php
listen = /run/php/seite1.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
```

Is-socket għandu jkun aċċessibbli biss għal Nginx. Ports FPM fin-netwerk, bħal `9000`, m'għandhomx jinfetħu lejn barra. Kif is-server ġeneralment juri biss il-ports meħtieġa tiddeskrivih [Firewall għal servers tal-web: iftaħ biss il-ports meħtieġa](https://phpsos.de/mt/blog/firewall-fuer-webserver/).

## Ismijiet ta' host mhux magħrufa u vit oħra

Mingħajr server standard proprju, Nginx iwieġeb għal talbiet għal ismijiet ta' host mhux magħrufa bl-ewwel blokk server li jaqbel. Skans awtomatiċi li jindirizzaw biss l-indirizz IP imbagħad jispiċċaw direttament fl-applikazzjoni tiegħek. Server standard proprju jtemm talbiet bħal dawn mingħajr tweġiba.

```nginx
server {
    listen 80 default_server;
    listen 443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
    return 444;
}
```

Punti oħra li ppruvaw ruħhom:

| Vit | Rakkomandazzjoni | Skop |
|---|---|---|
| `server_tokens` | `off` | l-ebda numru ta' verżjoni fl-headers u paġni ta' żball |
| `client_max_body_size` | adattat għal `post_max_size` | irrifjuta talbiet kbar kmieni |
| `autoindex` | mitfi (standard) | l-ebda listi ta' direttorji |
| `fastcgi_hide_header` | `X-Powered-By` | l-ebda verżjoni ta' PHP lejn barra |
| Paġni tal-istatus | `pm.status_path` biss internament | l-ebda data operattiva pubblika |
| Fajls ta' backup | ibblokka jew neħħi `.sql`, `.zip`, `.bak` fil-webroot | l-ebda download ta' databases |

Aktar dwar l-indikazzjonijiet tal-verżjoni jinsab fl-artikolu [expose_php u Server-headers](https://phpsos.de/mt/blog/expose-php-versionsangaben/).

Vit ieħor jolqot il-metodi HTTP permessi. Il-biċċa l-kbira tal-websajts jeħtieġu biss GET, HEAD u POST. B'`limit_except` metodi oħra jistgħu jiġu rrifjutati f'location; skont id-dokumentazzjoni ta' Nginx, l-għoti ta' GET awtomatikament jippermetti wkoll HEAD. Ivverifika qabel jekk interfaces tal-applikazzjoni tiegħek jużawx PUT jew DELETE, għax REST-APIs spiss jagħmlu hekk.

## Ittestja qabel ma tagħmel reload

Kull bidla tivverifikaha l-ewwel b'`nginx -t` u biss imbagħad terġa' tgħabbi Nginx. Wara ittestja l-imġiba minn barra b'talbiet normali lid-dominju tiegħek stess:

```bash
sudo nginx -t && sudo systemctl reload nginx
# Mistenni: 403 jew 404
curl -s -o /dev/null -w "%{http_code}\n" https://www.example.de/.git/HEAD
curl -s -o /dev/null -w "%{http_code}\n" https://www.example.de/.env
# Mistenni: 404, għax jiġi eżegwit biss il-front controller
curl -s -o /dev/null -w "%{http_code}\n" https://www.example.de/info.php
# Liema blokki jgħaddu lil PHP-FPM?
sudo nginx -T 2>/dev/null | grep -nE "location|fastcgi_pass"
```

Qabel kull bidla akbar salva l-output sħiħ ta' `nginx -T` bid-data. Fiha l-konfigurazzjoni effettiva kollha inklużi l-fajls kollha inklużi. Jekk wara bidla xi ħaġa tmur ħażin, it-tqabbil juri minnufih x'inbidel. Fil-vulnerabbiltà kritika li jmiss għandek ukoll bażi affidabbli għall-inventarju, mingħajr ma jkollok bżonn tiġbor il-fajls l-ewwel.

> **Suġġeriment:**
> Ibdel il-konfigurazzjoni l-ewwel fuq ambjent ta' test jew fuq kopja tal-blokk server. Punt tad-dħul minsi, pereżempju callback tal-pagament, inkella jidher biss meta l-ordnijiet jieqfu.

## Kif tgħin PHP SOS b'mod konkret?

- **Naqraw il-konfigurazzjoni:** nevalwaw il-konfigurazzjoni kollha ta' Nginx b'`nginx -T` u nassenjaw kull trasferiment lil PHP lill-websajt u lill-pool tiegħu.
- **Niddeterminaw il-punti tad-dħul:** flimkien mal-iżviluppaturi tiegħek niddeċiedu liema skripts iridu jiġu eżegwiti u nibblokkaw il-bqija.
- **Nimplimentaw u nittestjaw:** nadattaw blokki server u pools, nivverifikaw b'`nginx -t` u nittestjaw formoli, toroq tal-pagament u uploads.
- **Nassiguraw b'mod permanenti:** il-konfigurazzjoni ssir parti mit-[Tisħiħ tas-server](https://phpsos.de/mt/leistungen/server-haertung/) tagħna u mid-dokumentazzjoni tas-server tiegħek.


## Mistoqsijiet frekwenti

**Nginx irid jerġa' jinbeda wara aġġornament ta' PHP?**  
Għall-patch ta' PHP le, għax Nginx ma fihx PHP. Iridu jerġgħu jinbdew is-servizzi PHP-FPM kollha. Jekk ibiddel ukoll il-konfigurazzjoni ta' Nginx, ivverifikaha qabel b'nginx -t u imbagħad erġa' tgħabbi Nginx.

**Għaliex nibgħat lil PHP biss index.php?**  
Ħafna applikazzjonijiet moderni għandhom punt tad-dħul wieħed, il-front controller. Jekk biss dan il-fajl jinbgħat lil PHP-FPM, fajl PHP introdott f'post ieħor ma jistax jiġi eżegwit mill-browser. Fi sistemi b'ħafna punti tad-dħul dan il-mudell mhuwiex possibbli.

**X'jagħti security.limit_extensions f'PHP-FPM?**  
L-issettjar jiddetermina liema estensjonijiet ta' fajls PHP-FPM jesegwixxi bħala skript. Skont il-manwal ta' PHP l-istandard huwa .php .phar; jirrakkomanda li jiġi llimitat għal .php. Dan jaqbad żbalji fil-konfigurazzjoni tas-server tal-web, imma ma jissostitwihiex.

**Regoli ta' Nginx humiex protezzjoni kontra PHP2Shell?**  
Le. PHP2Shell jinsab fl-interpretatur ta' PHP u jingħalaq biss bl-aġġornament għal verżjoni rranġata u r-restart tal-workers kollha. Konfigurazzjoni sikura ta' Nginx tnaqqas is-superfiċje ta' attakk u tillimita d-dannu wara dħul.

## Sorsi

- [Nginx: ngx_http_core_module](https://nginx.org/en/docs/http/ngx_http_core_module.html)
- [Nginx: ngx_http_fastcgi_module](https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html)
- [Manwal ta' PHP: konfigurazzjoni ta' FPM](https://www.php.net/manual/en/install.fpm.configuration.php)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
