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-get install 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 -g web1 web1 mkdir -p /var/www/web1/htdocs chown web1: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 |
chmod 755 /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/ chown web1: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> FcgidMaxRequestLen 2000000 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.log combined 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-get install 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 ;OR apc.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_Enable 1 |
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