Installare Apache https e PHP-FPM in Debian
Installiamo il webserver Apache con https il primo dello stack LAMP, che si occuperà di servire i contenuti
Per ottimizzare le performance del webserver, consigliamo di utilizzare PHP-FPM, mpm_event e http2
La maggior parte dei siti web, utilizza connessioni sicure, vedremo come generare un certificato https valido e gratuito con Let's Encrypt
Di default, è previsto il modulo multiprocessi, mpm_prefork, che permette di utilizzare mod_php o php7.0, l'interprete interno
Questo approccio è sconsigliato, sui siti molto visitati, arrivati al numero di thread massimi, il webserver, smette di rispondere fino alla liberazione di un thread che possa servire i contenuti
apt install apache2 a2dismod mpm_prefork a2enmod mpm_event http2 service apache2 restart
Installare PHP-FPM
PHP-FPM è un implementazione alternativa a PHP FastCGI, nota per la velocità, tre volte superiore al classico modulo e le feature aggiuntive
FPM è un vero e proprio demone, resta in ascolto per le richieste php, tramite una porta o un socket UNIX
Rappresenta la P del nostro LAMP
apt install php-fpm libapache2-mod-fcgid a2enmod actions proxy_fcgi alias headers service php7.0-fpm restart service apache2 restart
E' ora possibile configurare per tutti i virtual host apache2 l'uso di FPM aggiungendo questo handler nella loro definizione
<FilesMatch ".+\.ph(p[345]?|t|tml)$"> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
Test di php con info.php:
<?php phpinfo(); phpinfo(INFO_MODULES); ?>
Installiamo i moduli necessari, php-MySQL e alcuni dei più comuni
apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear \ php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp \ php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl
Possiamo anche usare i moduli presenti in plesk
apt-get install php7.0-bcmath php7.0-enchant php7.0-imap php7.0-ldap php7.0-mysql \ php7.0-curl php7.0-curl php7.0-dba php7.0-enchant php7.0-gd php7.0-intl \ php7.0-json php7.0-ldap php7.0-mbstring php7.0-mcrypt php7.0-odbc \ php7.0-opcache php7.0-pgsql php7.0-sqlite3 php7.0-pspell php7.0-soap \ php7.0-tidy php7.0-xml php7.0-xmlrpc php7.0-xsl php7.0-zip
Let's Encrypt certificati SSL validi e gratuiti
Grazie all'ottimo Let's Encrypt, è possibile generare dei certificati SSL, universalmente riconosciuti, sicuri e gratuiti
E' necessario configurare il nome DNS del sito web che andremo a ospitare in modo da raggiungere l'IP del nostro server
Esempio configurazione DNS
Per configurare il DNS, è necessario accedere al pannello del nostro fornitore e registrare un nome di questo tipo
mydomain.ext A 1.1.1.1
Installiamo Let's Encrypt e generiamo i certificati SSL e TLS
apt-get install certbot python-certbot-apache # Creazione e configurazione di apache2 certbot --apache # Test renew dei certificati certbot renew --dry-run # Cron di revewal cat /etc/cron.d/certbot
Se non ci sono stati problemi nella risoluzione del nostro dominio, i nostri virtual host risponderanno in https, restituendoci il famoso "luchetto verde" sul browser
I Virtualhost apache2
Virtual host http
Per configurare un virtualhost http, possiamo utilizzare una definizione molto semplice, come questa listata
E' disponibile nella directory /etc/apache2/sites-available vhost di default, da cui possiamo partire
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Virtual host https
I virtual host https, includono i path necessari per l'utilizzo di SSL e l'attivazionedi PHP
<VirtualHost *:443> ServerAdmin [email protected] DocumentRoot "/var/www/data/online" ServerName mydomain.ext ServerAlias www.mydomain.ext ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Protocols h2 h2c http/1.1 SSLEngine on Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateFile /etc/letsencrypt/live/mydomain.ext/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ext/privkey.pem <FilesMatch ".+\.ph(p[345]?|t|tml)$"> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> </VirtualHost>