Server Setup · 10 min read · Sep 13, 2025

Il Server Perfetto - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - Pagina 4

10 Installa Nginx, PHP5 (PHP-FPM) e Fcgiwrap

Nginx è disponibile come pacchetto per OpenSUSE che possiamo installare come segue:

zypper install nginx

Se Apache2 è già installato sul sistema, fermalo ora…

systemctl stop apache2.service

… e rimuovi i collegamenti di avvio del sistema di Apache:

systemctl disable apache2.service

Poi creiamo i collegamenti di avvio del sistema per nginx e avviamolo:

systemctl enable nginx.service  
systemctl start nginx.service

(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 farà la configurazione necessaria automaticamente.)

Se vuoi usare indirizzi IPv6 con i tuoi vhosts nginx, ti preghiamo di fare quanto segue prima di creare vhosts IPv6 in ISPConfig:

Apri /etc/sysctl.conf…

vi /etc/sysctl.conf

… e aggiungi la riga net.ipv6.bindv6only = 1:

| [...] net.ipv6.bindv6only = 1 |

Esegui…

sysctl -p

… dopo per far sì che la modifica abbia effetto.

Possiamo far funzionare PHP5 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 per siti più trafficati) che installiamo come segue:

zypper install php5-fpm

Prima di avviare PHP-FPM, rinomina /etc/php5/fpm/php-fpm.conf.default in /etc/php5/fpm/php-fpm.conf:

mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

Cambia i permessi della directory di sessione di PHP:

chmod 1733 /var/lib/php5

Poi apri /etc/php5/fpm/php-fpm.conf…

vi /etc/php5/fpm/php-fpm.conf

… e cambia error_log in /var/log/php-fpm.log:

| [...] error_log = /var/log/php-fpm.log [...] |

Non c’è un file php.ini per PHP-FPM sotto OpenSUSE 12.3, quindi copiamo il php.ini CLI:

cp /etc/php5/cli/php.ini /etc/php5/fpm/

Successivamente apri /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… e imposta cgi.fix_pathinfo su 0:

| [...] ; cgi.fix_pathinfo fornisce supporto *reale* per PATH_INFO/PATH_TRANSLATED per CGI. Il comportamento precedente di PHP era impostare PATH_TRANSLATED su SCRIPT_FILENAME e non comprendere cosa fosse PATH_INFO. Per ulteriori informazioni su PATH_INFO, vedere le specifiche cgi. Impostare questo su 1 farà sì che PHP CGI corregga i suoi percorsi per conformarsi alla specifica. Un'impostazione di zero fa sì che PHP si comporti come prima. Il valore predefinito è 1. Dovresti correggere i tuoi script per usare SCRIPT_FILENAME piuttosto che PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

Successivamente crea i collegamenti di avvio del sistema per php-fpm e riavvialo:

systemctl enable php-fpm.service  
systemctl restart php-fpm.service

PHP-FPM è un processo daemon che esegue un server FastCGI sulla porta 9000, come puoi vedere nell’output di

netstat -tapn
server1:~ # netstat -tapn  
 Connessioni Internet attive (server e stabilite)  
 Proto  Recv-Q  Send-Q  Indirizzo Locale           Indirizzo Remoto         Stato       PID/Nome Programma  
 tcp        0      0 127.0.0.1:3310          0.0.0.0:*               LISTEN      10357/clamd  
 tcp        0      0 0.0.0.0:143              0.0.0.0:*               LISTEN      9869/dovecot  
 tcp        0      0 0.0.0.0:80               0.0.0.0:*               LISTEN      10521/nginx  
 tcp        0      0 0.0.0.0:22               0.0.0.0:*               LISTEN      1275/sshd  
 tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      9816/master  
 tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      10695/php-fpm.conf)  
 tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      10337/amavisd (mast  
 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      9694/mysqld  
 tcp        0      0 192.168.0.100:22        192.168.0.199:4630      ESTABLISHED 1332/0  
 tcp        0      0 :::22                     :::*                     LISTEN      1275/sshd  
 tcp        0      0 ::1:25                   :::*                     LISTEN      9816/master  
 server1:~ #

Per ottenere il supporto MySQL in PHP, possiamo installare il pacchetto php5-mysql. È una buona idea installare anche alcuni altri moduli PHP5 poiché potresti averne bisogno per le tue applicazioni:

zypper install php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm

Ora riavvia PHP-FPM:

systemctl restart php-fpm.service

Per 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 poiché consente a ciascun vhost di utilizzare la propria directory cgi-bin.

Poiché non esiste un pacchetto fcgiwrap per OpenSUSE, dobbiamo compilarlo noi stessi. Prima installiamo alcune dipendenze:

zypper install git patch automake glibc-devel gcc flex compat-readline4 db-devel wget gcc-c++ make vim libtool FastCGI-devel

Crea i seguenti symlink:

ln -s /usr/include/fastcgi/fastcgi.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_config.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgi_stdio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgiapp.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgimisc.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgio.h /usr/local/include/  
ln -s /usr/include/fastcgi/fcgios.h /usr/local/include/

Ora possiamo costruire fcgiwrap come segue:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

Questo installa fcgiwrap in /usr/local/sbin/fcgiwrap.

Successivamente installiamo il pacchetto spawn-fcgi che ci consente di eseguire fcgiwrap come un daemon:

zypper install spawn-fcgi

Possiamo ora avviare fcgiwrap come segue:

spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap

Ora dovresti trovare il socket fcgiwrap in /var/run/fcgiwrap.socket, di proprietà dell’utente wwwrun e del gruppo www. Dobbiamo ora aggiungere l’utente nginx al gruppo www:

usermod -a -G www nginx

Ricarica nginx successivamente:

systemctl reload nginx.service

Se non vuoi avviare fcgiwrap manualmente ogni volta che avvii il sistema, apri /etc/init.d/boot.local…

vi /etc/init.d/boot.local

… e aggiungi il comando spawn-fcgi alla fine del file - questo avvierà automaticamente fcgiwrap alla fine del processo di avvio:

| [...] /usr/bin/spawn-fcgi -u wwwrun -g www -s /var/run/fcgiwrap.socket -S -M 0770 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/local/sbin/fcgiwrap |

Questo è tutto! Ora quando crei un vhost nginx, ISPConfig si occuperà della corretta configurazione del vhost.

10.1 Installa phpMyAdmin

Successivamente installiamo phpMyAdmin:

zypper install phpMyAdmin

Poiché questo installa Apache come dipendenza, rimuovi i collegamenti di avvio del sistema di Apache:

systemctl disable apache2.service

phpMyAdmin si trova ora nella directory /srv/www/htdocs/phpMyAdmin, ma lo vogliamo nella directory /usr/share/phpmyadmin/, quindi creiamo un symlink:

ln -s /srv/www/htdocs/phpMyAdmin /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 quanto segue 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 127.0.0.1:9000; 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 usi 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 127.0.0.1:9000; 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 di inclusione) che determina se il visitatore utilizza http o https e imposta la variabile $fastcgi_https (che utilizzeremo nella nostra configurazione di phpMyAdmin) di conseguenza:

vi /etc/nginx/nginx.conf

| [...] http { [...] ## Rileva quando viene utilizzato HTTPS map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

Non dimenticare di ricaricare nginx successivamente:

systemctl reload nginx.service

Poi vai 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 usare phpMyAdmin per entrambe le richieste http e 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 127.0.0.1:9000; 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; } |

11 Installa PureFTPd

Installa il demone FTP pure-ftpd. Esegui:

zypper install pure-ftpd
systemctl enable pure-ftpd.service  
systemctl start pure-ftpd.service

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.

OpenSSL è necessario per TLS; per installare OpenSSL, eseguiamo semplicemente:

zypper install openssl

Apri /etc/pure-ftpd/pure-ftpd.conf…

vi /etc/pure-ftpd/pure-ftpd.conf

Se vuoi consentire sessioni FTP e TLS, imposta TLS su 1:

| [...] # Questa opzione può accettare tre valori : # 0 : disabilita il livello di crittografia SSL/TLS (predefinito). # 1 : accetta sia sessioni tradizionali che crittografate. # 2 : rifiuta connessioni che non utilizzano meccanismi di sicurezza SSL/TLS, # comprese le sessioni anonime. # Non decommentare questo alla leggera. Assicurati che : # 1) Il tuo server sia stato compilato con supporto SSL/TLS (--with-tls), # 2) Un certificato valido sia in atto, # 3) Solo client compatibili accederanno. TLS 1 [...] |

Se vuoi accettare solo sessioni TLS (no FTP), imposta TLS su 2:

| [...] # Questa opzione può accettare tre valori : # 0 : disabilita il livello di crittografia SSL/TLS (predefinito). # 1 : accetta sia sessioni tradizionali che crittografate. # 2 : rifiuta connessioni che non utilizzano meccanismi di sicurezza SSL/TLS, # comprese le sessioni anonime. # Non decommentare questo alla leggera. Assicurati che : # 1) Il tuo server sia stato compilato con supporto SSL/TLS (--with-tls), # 2) Un certificato valido sia in atto, # 3) Solo client compatibili accederanno. TLS 2 [...] |

Per non consentire affatto TLS (solo FTP), imposta TLS su 0:

| [...] # Questa opzione può accettare tre valori : # 0 : disabilita il livello di crittografia SSL/TLS (predefinito). # 1 : accetta sia sessioni tradizionali che crittografate. # 2 : rifiuta connessioni che non utilizzano meccanismi di sicurezza SSL/TLS, # comprese le sessioni anonime. # Non decommentare questo alla leggera. Assicurati che : # 1) Il tuo server sia stato compilato con supporto SSL/TLS (--with-tls), # 2) Un certificato valido sia in atto, # 3) Solo client compatibili accederanno. TLS 0 [...] |

Per utilizzare TLS, dobbiamo creare un certificato SSL. Lo creo in /etc/ssl/private/, quindi creo prima quella directory:

mkdir -p /etc/ssl/private/

Dopo, 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.pem

Nome del Paese (codice di 2 lettere) [AU]: <– Inserisci il Nome del tuo Paese (es. “DE”).
Nome dello Stato o della Provincia (nome completo) [Some-State]: <– Inserisci il Nome del tuo Stato o della Provincia.
Nome della Località (es. città) []: <– Inserisci la tua Città.
Nome dell’Organizzazione (es. azienda) [Internet Widgits Pty Ltd]: <– Inserisci il Nome della tua Organizzazione (es. il nome della tua azienda).
Nome dell’Unità Organizzativa (es. sezione) []: <– Inserisci il Nome della tua Unità Organizzativa (es. “Dipartimento IT”).
Nome Comune (es. IL TUO nome) []: <– Inserisci il Nome di Dominio Completo del sistema (es. “server1.example.com”).
Indirizzo Email []: <– Inserisci il tuo Indirizzo Email.

Cambia i permessi del certificato SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Infine riavvia PureFTPd:

systemctl restart pure-ftpd.service

Questo è tutto. Ora puoi provare a connetterti utilizzando il tuo client FTP; tuttavia, dovresti configurare il tuo client FTP per utilizzare TLS - vedi il capitolo successivo su come farlo con FileZilla.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.