Non mi dilungo a descrivere cosa sono PHP ed Apache, ormai sanno tutti di cosa si tratta :-), ma parliamo di come installare PHP in modalità fastcgi piuttosto che come modulo di apache.
Innanzitutto, quali sono i vantaggi di usare mod_fcgid (mod_fcgid è un’alternativa compatibile con il vecchio mod_fastcgi) rispetto al classico mod_php?
- utilizzo di suexec che permette l’esecuzione degli script con uno specifico utente (ottimo per lo shared hosting)
- ovviamente c’è maggior sicurezza
- è possibile attivare configurazioni php differenti per sito web
- è possibile avviare versioni di php differenti, es. php5, php5.1, php5.2, php 5.3
Ora passiamo all’installazione.
Installo i pacchetti di base
1 | apt-getinstall apache2 apache2-suexec libapache2-mod-fcgid php5-cgi |
Abilito i moduli di apache
1 2 3 4 | a2enmod rewrite a2enmod suexec a2enmod include a2enmod fcgid |
Creo un primo sito chiamato web1 in /var/www/web1/web
1 2 3 4 | groupadd web1 useradd-s/bin/false-d/var/www/web1-m-gweb1 web1 mkdir-p/var/www/web1/htdocs chownweb1:web1/var/www/web1/htdocs |
Verifico il path di suexec:
1 | /usr/lib/apache2/suexec-V |
Dovrebbe essere “/var/www” e per questo motivo non posso chiamare direttamente il binario /usr/lib/cgi-bin/php
Creo quindi il wrapper script per fcgi
1 2 3 4 5 6 7 8 9 10 11 | mkdir-p/var/www/php-fcgi-scripts/web1 vi/var/www/php-fcgi-scripts/web1/php-fcgi-starter ################# #!/bin/sh #PHPRC=/etc/php5/cgi/ PHPRC=/var/www/web1/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec/usr/lib/cgi-bin/php ################# |
Rendo eseguibile il wrapper
1 | chmod755/var/www/php-fcgi-scripts/web1/php-fcgi-starter |
Creo il file php.ini dedicato per il virtual host, in cui posso inserire una configurazione personalizzata e differente dagli altri virtual host
1 2 | cp/etc/php5/cgi/php.ini/var/www/web1/ chownweb1:web1/var/www/web1/php.ini |
Creo il virtual host in apache
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | vi/etc/apache2/sites-available/web1 ################################### <VirtualHost*:80> ServerName www.example1.com ServerAlias example1.com ServerAdmin webmaster@example1.com DocumentRoot/var/www/web1/htdocs/ <IfModule mod_fcgid.c> FcgidMaxRequestLen2000000 SuexecUserGroup web1 web1 <Directory/var/www/web1/htdocs/> Options+ExecCGI AllowOverride All AddHandler fcgid-script.php FCGIWrapper/var/www/php-fcgi-scripts/web1/php-fcgi-starter.php Order allow,deny Allow from all </Directory> Alias/mail"/usr/share/apache2/roundcubemail/" Alias/webmail"/usr/share/apache2/roundcubemail/" Alias/roundcube"/usr/share/apache2/roundcubemail/" <Directory"/usr/share/apache2/roundcubemail/"> Options-Indexes Options+ExecCGI AllowOverride All AddHandler fcgid-script.php FCGIWrapper/var/www/php-fcgi-scripts/roundcubemail/php-fcgi-starter.php Order allow,deny Allow from all </Directory> </IfModule> ErrorLog/var/log/apache2/error.log CustomLog/var/log/apache2/access.logcombined ServerSignature Off </VirtualHost> ################################### |
Attivo il virtual host
1 | a2ensite web1 |
Riavvio apache
1 | /etc/init.d/apache2 reload |
Bene, ci siamo… la configurazione è terminata
Ora, attiviamo anche APC, per migliorare le performance di sistema.
1 | apt-getinstall php-apc |
e poi configuriamolo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | vi/etc/php5/conf.d/apc.ini ################################ extension=apc.so apc.enabled=1 apc.shm_segments=1 apc.shm_size=64M apc.optimization=0 apc.num_files_hint=512 apc.user_entries_hint=1024 apc.ttl=0 apc.user_ttl=0 apc.gc_ttl=3600 apc.cache_by_default=1 apc.slam_defense=0 apc.use_request_time=1 apc.mmap_file_mask=/tmp/apc-accountname.XXXXXX ;ORapc.mmap_file_mask=/dev/zero apc.file_update_protection=2 apc.enable_cli=0 apc.max_file_size=2M apc.stat=1 apc.write_lock=1 apc.report_autofilter=0 apc.include_once_override=0 apc.rfc1867=0 apc.rfc1867_prefix="upload_" apc.rfc1867_name="APC_UPLOAD_PROGRESS" apc.rfc1867_freq=0 apc.localcache=1 apc.localcache.size=512 apc.coredump_unmap=0 apc.stat_ctime=0 ################################ |
Attivo in /etc/php5/cgi/php.ini il cgi-fix (APC non condivide di default la cache tra più php-cgi attivi con fastgci o fcgid):
1 | cgi.fix_pathinfo=1 |
e lo abilito in /etc/apache2/mods-available/fcgid.conf
1 | PHP_Fix_Pathinfo_Enable1 |
Verifichiamo che apache riparta e che sia quindi tutto corretto fino ad ora…
1 | /etc/init.d/apache2 restart |
Verifichiamo che APC funzioni, copiando lo script di controllo nel nostro virtual host:
1 2 | cp/usr/share/doc/php-apc/apc.php.gz/var/www/web1/htdocs/ gunzip /var/www/web1/htdocs/apc.php.gz |
ed infine richiamiamo lo script apc.php nel nostro browser.
enjoy!
Ti interessa acquistare un dominio a prezzi ultraconvenienti? clicca qui
Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂
Commenta