Guida alle tecnologie

Configurare php-fcgi per siti separati e php.ini personalizzati

5 min read Server PHP Aggiornato 21 Oct 2025
php-fcgi: test e php.ini per sito
php-fcgi: test e php.ini per sito

  • Testa rapidamente PHP creando un file phpinfo() nella root del sito e verificando che Server API mostri CGI/FastCGI.
  • Per avere php.ini diversi per sito, copia il php.ini nella directory del sito e imposta PHPRC nel wrapper php-fcgi-starter.
  • Per cambiare singole direttive, usa il parametro -d quando esegui php-cgi.

Sommario rapido

Questo articolo spiega come testare una configurazione PHP tramite FastCGI, come assegnare un php.ini diverso per ogni sito web usando i wrapper php-fcgi-starter e come modificare singole impostazioni PHP con l’opzione -d. Include esempi pratici, controlli di verifica, suggerimenti per il troubleshooting e checklist per amministratori e sviluppatori.

4 Testing

Ora creiamo un piccolo file di test PHP, ad esempio nella directory del sito www.example1.com.

vi /srv/www/web1/web/info.php

Inserisci il seguente contenuto nel file:

Quindi apri il file nel browser (http://www.example1.com/info.php). Se tutto è configurato correttamente, l’output dovrebbe assomigliare a quello mostrato nella schermata e nella riga “Server API” dovresti vedere CGI/FastCGI.

/Output phpinfo() che mostra la linea Server API impostata su CGI/FastCGI

Importante: dopo ogni modifica ai wrapper o alla configurazione di Apache, riavvia Apache con systemctl restart apache2.service.

5 php.ini personalizzato per ogni sito

Poiché ogni sito ha il proprio wrapper php-fcgi-starter, è possibile usare un php.ini diverso per sito. Per dimostrare il processo, copio il php.ini di default nella directory del sito web2 e imposto i permessi corretti:

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

(Adesso puoi modificare /srv/www/web2/php.ini come preferisci.)

Apri il wrapper del sito web2:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

Modifica la variabile PHPRC in modo che punti alla directory del sito:

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Poi riavvia Apache:

systemctl restart apache2.service

Crea il file info.php per www.example2.com:

vi /srv/www/web2/web/info.php

Con lo stesso contenuto phpinfo():

Apri http://www.example2.com/info.php e verifica la riga “Loaded Configuration File”: ora dovrebbe mostrare /srv/www/web2/php.ini.

/Schermata che mostra Loaded Configuration File impostato su /srv/www/web2/php.ini

Nota: PHPRC può essere una directory o un file; usare la directory rende più semplice gestire file inclusi.

6 Modificare singole impostazioni PHP

Se non vuoi fornire un intero php.ini personalizzato, puoi cambiare singole direttive direttamente nel wrapper usando l’opzione -d di php-cgi. Esempio: disabilitare magic_quotes_gpc per www.example2.com.

Apri il wrapper:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

Edita come segue:

#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off

Riavvia Apache:

systemctl restart apache2.service

Ricarica http://www.example2.com/info.php e cerca la riga magic_quotes_gpc: dovrebbe mostrare Off.

/Schermata che mostra magic_quotes_gpc impostata su Off in phpinfo()

Procedura raccomandata (mini-metodologia)

  1. Crea un file info.php con phpinfo() per il sito da testare.
  2. Verifica che Apache usi mod_fcgid o equivalente e che il processo php-cgi sia avviato tramite il wrapper.
  3. Se vuoi un php.ini personalizzato, copia il php.ini nella directory del sito e aggiorna PHPRC nel wrapper.
  4. Per cambi rapidi, usa exec /usr/bin/php-cgi -d chiave=valore nel wrapper.
  5. Riavvia Apache e verifica con phpinfo().

Checklist per ruolo

Amministratore di sistema

  • Verificare permessi e proprietario di /srv/www//php.ini
  • Controllare che il wrapper sia eseguibile e senza errori di sintassi
  • Riavviare apache2 dopo ogni modifica

Sviluppatore

  • Testare impact delle direttive nel sito su un ambiente di staging
  • Usare phpinfo() per validare le impostazioni attive
  • Tenere traccia delle modifiche al php.ini nel controllo versione (se possibile)

Quando questa tecnica fallisce — controlli di troubleshooting

  • Verifica che il wrapper sia eseguito dall’utente atteso. Se il proprietario è sbagliato, PHP potrebbe non leggere il php.ini.
  • Se non vedi cambi nelle impostazioni, assicurati che non ci siano file ini aggiuntivi caricati da /etc/php*/conf.d che sovrascrivono le direttive.
  • Controlla i log di Apache e i log di sistema per errori di permission denied o esecuzione del binario.
  • Assicurati che il percorso di exec (/usr/bin/php-cgi) esista e sia la versione attesa.

Esempi di casi d’uso alternativi

  • Per ambienti multi-tenant con isolamento forte, considera l’uso di container o PHP-FPM pools con pool config separati.
  • Se hai bisogno di applicare molte direttive diverse, fornire un php.ini dedicato è più manutenibile rispetto a numerosi -d.

Sicurezza e privacy

  • Evita di memorizzare credenziali in php.ini se non strettamente necessario; preferisci variabili d’ambiente o segreti gestiti.
  • Limita i permessi del php.ini personalizzato a root o all’utente del sito. Non rendere il file leggibile da altri siti.
  • Se il sito gestisce dati personali, verifica che le direttive relative a logging e display_errors siano disabilitate in produzione.

Criteri di accettazione

  • info.php mostra Server API = CGI/FastCGI per i siti configurati.
  • Per il sito con php.ini personalizzato, phpinfo() mostra Loaded Configuration File = /srv/www//php.ini.
  • Le direttive modificate con -d appaiono con il valore atteso in phpinfo().

Glossario (una riga ciascuno)

  • phpinfo(): funzione PHP che stampa la configurazione corrente.
  • PHPRC: variabile d’ambiente che indica la directory/file php.ini da caricare.
  • php-fcgi-starter: wrapper shell che avvia php-cgi con variabili d’ambiente specifiche.

Link utili

Riepilogo

Seguendo i passi descritti puoi testare rapidamente la tua configurazione PHP, assegnare un php.ini diverso per ogni sito tramite PHPRC e modificare singole direttive con -d. Usa la checklist e i controlli di troubleshooting per diagnosticare problemi comuni e mantieni la sicurezza isolando i file di configurazione e limitando i permessi.

Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/