Configurare php-fcgi per siti separati e php.ini personalizzati
- 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.phpInserisci 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.

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-starterModifica 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-cgiPoi riavvia Apache:
systemctl restart apache2.serviceCrea il file info.php per www.example2.com:
vi /srv/www/web2/web/info.phpCon 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.

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-starterEdita 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=offRiavvia Apache:
systemctl restart apache2.serviceRicarica http://www.example2.com/info.php e cerca la riga magic_quotes_gpc: dovrebbe mostrare Off.

Procedura raccomandata (mini-metodologia)
- Crea un file info.php con phpinfo() per il sito da testare.
- Verifica che Apache usi mod_fcgid o equivalente e che il processo php-cgi sia avviato tramite il wrapper.
- Se vuoi un php.ini personalizzato, copia il php.ini nella directory del sito e aggiorna PHPRC nel wrapper.
- Per cambi rapidi, usa exec /usr/bin/php-cgi -d chiave=valore nel wrapper.
- 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
- mod_fcgid: http://fastcgi.coremail.cn/
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- OpenSUSE: http://www.opensuse.org/
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.