Server Setup · 12 min read · Oct 22, 2025
Il Server Perfetto - Ubuntu 16.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD e ISPConfig 3.1) - Pagina 2
8. Installa Nginx, PHP5 (PHP-FPM) e Fcgiwrap
Nginx è disponibile come pacchetto per Ubuntu che possiamo installare con il seguente comando:
apt-get install nginxQuando Apache2 è già installato sul sistema, fermalo ora…
service apache2 stop… e rimuovi i collegamenti di avvio del sistema di Apache:
update-rc.d -f apache2 removeAvvia nginx successivamente:
service nginx start(Se sia Apache2 che nginx sono installati, l’installatore di ISPConfig 3 ti chiederà quale vuoi usare - rispondi nginx in questo caso. Se solo uno di questi due è installato, ISPConfig eseguirà la configurazione necessaria automaticamente.)
Possiamo far funzionare PHP 7 in nginx tramite PHP-FPM (PHP-FPM (FastCGI Process Manager) è un’implementazione alternativa di PHP FastCGI con alcune funzionalità aggiuntive utili per siti di qualsiasi dimensione, specialmente siti più trafficati) che installiamo come segue:
apt-get -y install php7.0-fpmPHP-FPM è un processo daemon che esegue un server FastCGI sul socket /var/run/php/php7.0-fpm.sock.
Per ottenere il supporto MySQL in PHP, possiamo installare il pacchetto php7.0-mysql. È una buona idea installare anche alcuni altri moduli PHP5 poiché potresti averne bisogno per le tue applicazioni. Puoi cercare i moduli PHP5 disponibili in questo modo:
apt-cache search php7.0Scegli quelli di cui hai bisogno e installali in questo modo:
apt-get -y install php7.0-opcache php7.0-fpm php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi php-pear php-auth php7.0-mcrypt mcrypt imagemagick libruby php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstringLe estensioni mbstring e mcrypt devono essere abilitate manualmente.
phpenmod mcrypt
phpenmod mbstringAPCu è un’estensione PHP per l’OPcache di PHP 7 che aggiunge uno strato di compatibilità per il software che utilizza la cache APC di PHP.
APCu può essere installato come segue:
apt-get -y install php-apcuSuccessivamente apri /etc/php/7.0/fpm/php.ini…
nano /etc/php/7.0/fpm/php.ini… e imposta cgi.fix_pathinfo=0 e il tuo fuso orario:
[...]
cgi.fix_pathinfo=0
[...]
date.timezone="Europe/Berlin"
[...](Puoi trovare tutti i fusi orari disponibili nelle directory /usr/share/zoneinfo e nelle sue sottodirectory.)
Ora ricarica PHP-FPM:
service php7.0-fpm reloadPer ottenere il supporto CGI in nginx, installiamo Fcgiwrap.
Fcgiwrap è un wrapper CGI che dovrebbe funzionare anche per script CGI complessi e può essere utilizzato per ambienti di hosting condiviso perché consente a ciascun vhost di utilizzare la propria directory cgi-bin.
Installa il pacchetto fcgiwrap:
apt-get -y install fcgiwrapDopo l’installazione, il daemon fcgiwrap dovrebbe già essere avviato; il suo socket è /var/run/fcgiwrap.socket. Se non è in esecuzione, puoi utilizzare lo script /etc/init.d/fcgiwrap per avviarlo.
Questo è tutto! Ora quando crei un vhost nginx, ISPConfig si occuperà della corretta configurazione del vhost.
8.1 Versioni PHP Aggiuntive
A partire da ISPConfig 3.0.5, è possibile avere più versioni di PHP su un server (selezionabili tramite ISPConfig) che possono essere eseguite tramite PHP-FPM. Per sapere come costruire versioni PHP aggiuntive (PHP-FPM) e come configurare ISPConfig, controlla questo tutorial: Come Usare Più Versioni di PHP (PHP-FPM & FastCGI) Con ISPConfig 3 (Ubuntu 12.10) (funziona anche per Ubuntu 16.04).
8.2 Installa phpMyAdmin
Installa phpMyAdmin come segue:
apt-get -y install phpmyadmin php-mbstring php-gettextVedrai le seguenti domande:
Server web da riconfigurare automaticamente: <– seleziona nessuno (perché solo apache2 e lighttpd sono disponibili come opzioni)
Password dell’applicazione MySQL per phpmyadmin: <– Premi Invio
Ora puoi trovare phpMyAdmin nella directory /usr/share/phpmyadmin/.
Dopo aver installato ISPConfig 3, puoi accedere a phpMyAdmin come segue:
Il vhost delle app ISPConfig sulla porta 8081 per nginx viene fornito con una configurazione di phpMyAdmin, quindi puoi usare http://server1.example.com:8081/phpmyadmin o http://server1.example.com:8081/phpMyAdmin per accedere a phpMyAdmin.
Se vuoi usare un alias /phpmyadmin o /phpMyAdmin che puoi usare dai tuoi siti web, questo è un po’ più complicato rispetto ad Apache perché nginx non ha alias globali (cioè, alias che possono essere definiti per tutti i vhosts). Pertanto, devi definire questi alias per ogni vhost da cui vuoi accedere a phpMyAdmin.
Per fare ciò, incolla il seguente codice nel campo Direttive nginx nella scheda Opzioni del sito web in ISPConfig:
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}Se utilizzi http s invece di http per il tuo vhost, dovresti aggiungere la riga fastcgi_param HTTPS on; alla tua configurazione di phpMyAdmin in questo modo:
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param HTTPS on; # <-- aggiungi questa riga
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}Se utilizzi sia http che https per il tuo vhost, devi aggiungere la seguente sezione alla sezione http {} in /etc/nginx/nginx.conf (prima di qualsiasi riga include) che determina se il visitatore utilizza http o https e imposta la variabile $fastcgi_https (che utilizzeremo nella nostra configurazione di phpMyAdmin) di conseguenza:
nano /etc/nginx/nginx.conf[...]
http {
[...]
## Rileva quando viene utilizzato HTTPS
map $scheme $fastcgi_https {
default off;
https on;
}
[...]
}
[...]Non dimenticare di ricaricare nginx successivamente:
service nginx reloadPoi torna di nuovo al campo Direttive nginx, e invece di fastcgi_param HTTPS on; aggiungi la riga fastcgi_param HTTPS $fastcgi_https; in modo da poter utilizzare phpMyAdmin sia per le richieste HTTP che HTTPS:
location /phpmyadmin {
root /usr/share/;
index index.php index.html index.htm;
location ~ ^/phpmyadmin/(.+\.php)$ {
try_files $uri =404;
root /usr/share/;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_param HTTPS $fastcgi_https; # <-- aggiungi questa riga
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}
location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}Ubuntu non consente più accessi a MySQL come utente root tramite PHPMyAdmin. Senza privilegi di root, non puoi utilizzare PHPMyAdmin per amministrare gli utenti del database o per creare database. Per aggirare questo problema, creerò un nuovo utente MySQL con il nome “admin” qui che ha privilegi di root. Questo utente admin può essere utilizzato per l’amministrazione del database in PHPMyAdmin.
Accedi al database MySQL come utente root nella shell:
mysql -u rootCrea un nuovo utente “admin” con la password “howtoforge”. Sostituisci la password “howtoforge” con una password sicura nei comandi qui sotto!
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit8.3 Installa HHVM (HipHop Virtual Machine)
In questo passaggio, installeremo HHVM con apt. HHVM è un motore PHP veloce sviluppato da Facebook.
apt-get -y install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
add-apt-repository "deb http://dl.hhvm.com/ubuntu xenial main"
apt-get update
apt-get -y install hhvm8.4. Installa Let’s Encrypt
ISPConfig 3.1 ha il supporto integrato per l’Autorità di Certificazione SSL gratuita Let’s Encrypt. La funzione Let’s Encrypt ti consente di creare certificati SSL gratuiti per il tuo sito web in ISPConfig.
Ora aggiungeremo il supporto per Let’s Encrypt.
apt install software-properties-common
add-apt-repository ppa:certbot/certbot
apt update
apt -y remove letsencrypt
apt -y install python-certbot-nginx9. Installa Mailman
ISPConfig consente anche di gestire (creare/modificare/eliminare) le liste di distribuzione Mailman. Se desideri utilizzare questa funzione, installa Mailman come segue:
apt-get -y install mailmanSeleziona almeno una lingua, ad esempio:
Lingue da supportare: <– it (Italiano)
Lista siti mancanti <– Ok
Prima di poter avviare Mailman, deve essere creata una prima lista di distribuzione chiamata mailman:
newlist mailmanroot@server1:~# newlist mailman
Inserisci l’email della persona che gestisce la lista: <– indirizzo email dell’amministratore, ad esempio [email protected]
Password iniziale di mailman: <– password dell’amministratore per la lista mailman
Per terminare la creazione della tua lista di distribuzione, devi modificare il tuo file /etc/aliases (o equivalente) aggiungendo le seguenti righe, e possibilmente eseguendo il programma newaliases:
lista di distribuzione mailman
mailman: “|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/var/lib/mailman/mail/mailman unsubscribe mailman”
Premi invio per notificare il proprietario di mailman… <– INVIO
root@server1:~#
Apri /etc/aliases successivamente…
nano /etc/aliases… e aggiungi le seguenti righe:
[...]
## lista di distribuzione mailman
mailman: "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman"Esegui
newaliasessuccessivamente e riavvia Postfix:
service postfix restartPoi avvia il daemon di Mailman:
service mailman startDopo aver installato ISPConfig 3, puoi accedere a Mailman come segue:
Il vhost delle app ISPConfig sulla porta 8081 per nginx viene fornito con una configurazione di Mailman, quindi puoi usare http://server1.example.com:8081/cgi-bin/mailman/admin/
Se vuoi utilizzare Mailman dai tuoi siti web, questo è un po’ più complicato rispetto ad Apache perché Nginx non ha alias globali (cioè, alias che possono essere definiti per tutti i vhosts). Pertanto, devi definire questi alias per ogni vhost da cui vuoi accedere a Mailman.
Per fare ciò, incolla il seguente codice nel campo Direttive nginx nella scheda Opzioni del sito web in ISPConfig:
location /cgi-bin/mailman {
root /usr/lib/;
fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
location /images/mailman {
alias /usr/share/images/mailman;
}
location /pipermail {
alias /var/lib/mailman/archives/public;
autoindex on;
}Questo definisce l’alias /cgi-bin/mailman/ per il tuo vhost, il che significa che puoi accedere all’interfaccia di amministrazione di Mailman per una lista su http://
Sotto http://
10. Installa PureFTPd e Quota
PureFTPd e quota possono essere installati con il seguente comando:
apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatoolModifica il file /etc/default/pure-ftpd-common…
nano /etc/default/pure-ftpd-common… e assicurati che la modalità di avvio sia impostata su standalone e imposta VIRTUALCHROOT=true:
[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]Ora configuriamo PureFTPd per consentire sessioni FTP e TLS. FTP è un protocollo molto insicuro perché tutte le password e tutti i dati vengono trasferiti in chiaro. Utilizzando TLS, l’intera comunicazione può essere crittografata, rendendo così FTP molto più sicuro.
Se desideri consentire sessioni FTP e TLS, esegui
echo 1 > /etc/pure-ftpd/conf/TLSPer utilizzare TLS, dobbiamo creare un certificato SSL. Lo creo in /etc/ssl/private/, quindi creo prima quella directory:
mkdir -p /etc/ssl/private/Successivamente, possiamo generare il certificato SSL come segue:
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pemNome del Paese (codice di 2 lettere) [AU]: <– Inserisci il tuo Nome del Paese (ad esempio, “DE”).
Nome dello Stato o della Provincia (nome completo) [Some-State]: <– Inserisci il tuo Nome dello Stato o della Provincia.
Nome della Località (es. città) []: <– Inserisci la tua Città.
Nome dell’Organizzazione (es. azienda) [Internet Widgits Pty Ltd]: <– Inserisci il tuo Nome dell’Organizzazione (ad esempio, il nome della tua azienda).
Nome dell’Unità Organizzativa (es. sezione) []: <– Inserisci il tuo Nome dell’Unità Organizzativa (ad esempio, “Reparto IT”).
Nome Comune (es. IL TUO nome) []: <– Inserisci il Nome Dominio Completo del sistema (ad esempio, “server1.example.com”).
Indirizzo Email []: <– Inserisci il tuo Indirizzo Email.
Cambia i permessi del certificato SSL:
chmod 600 /etc/ssl/private/pure-ftpd.pemPoi riavvia PureFTPd:
service pure-ftpd-mysql restartModifica /etc/fstab. Il mio appare così (ho aggiunto,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 alla partizione con il punto di montaggio /):
nano /etc/fstab# /etc/fstab: informazioni statiche sul file system.
#
# Usa 'blkid' per stampare l'identificatore univoco universale per un
# dispositivo; questo può essere utilizzato con UUID= come un modo più robusto per nominare dispositivi
# che funziona anche se i dischi vengono aggiunti e rimossi. Vedi fstab(5).
#
#
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# /boot era su /dev/sda1 durante l'installazione
UUID=39762f15-3a49-4982-add3-139d5040b48a /boot ext2 defaults 0 2
/dev/mapper/server1--vg-swap_1 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0 Per abilitare la quota, esegui questi comandi:
mount -o remount /quotacheck -avugm
quotaon -avugI seguenti messaggi di errore sono normali per il comando e possono essere ignorati:
quotacheck: Scanning /dev/mapper/server1--vg-root [/] done
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 18566 directories and 110119 files
quotacheck: Old file not found.
quotacheck: Old file not found.11. Installa il Server DNS BIND
BIND è installato come segue:
apt-get -y install bind9 dnsutils havegedAbilita e avvia haveged.
systemctl enable haveged
service haveged start12. Installa Vlogger, Webalizer e AWStats
Vlogger, Webalizer e AWStats possono essere installati come segue:
apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perlApri /etc/cron.d/awstats successivamente…
nano /etc/cron.d/awstats… e commenta tutto in quel file:
#MAILTO=root
#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh
# Genera report statici:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh13. Installa Jailkit
Jailkit è necessario solo se desideri chrootare gli utenti SSH. Può essere installato come segue (importante: Jailkit deve essere installato prima di ISPConfig - non può essere installato successivamente!):
apt-get -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutilscd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
./debian/rules binaryOra puoi installare il pacchetto Jailkit.deb come segue:
cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*14. Installa fail2ban
Questo è facoltativo ma raccomandato, perché il monitor di ISPConfig cerca di mostrare il log:
apt-get -y install fail2banPer far sì che fail2ban monitori PureFTPd e Dovecot, crea il file /etc/fail2ban/jail.local:
nano /etc/fail2ban/jail.local[pureftpd]
enabled = true
port = ftp
filter = pureftpd
logpath = /var/log/syslog
maxretry = 3
[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/syslog
maxretry = 5
[postfix-sasl]
enabled = true
port = smtp
filter = postfix-sasl
logpath = /var/log/syslog
maxretry = 3Poi crea i seguenti due file di filtro:
nano /etc/fail2ban/filter.d/pureftpd.conf[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex = nano /etc/fail2ban/filter.d/dovecot-pop3imap.conf[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.*
ignoreregex = Aggiungi la riga ignoreregex mancante nel file postfix-sasl:
echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.confRiavvia fail2ban successivamente:
service fail2ban restartPer installare il firewall UFW, esegui questo comando apt:
apt-get install ufwRicevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.