Serveur Web · 10 min read · Sep 13, 2025

Le Serveur Parfait - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3) - Page 4

10 Installer Nginx, PHP5 (PHP-FPM) et Fcgiwrap

Nginx est disponible en tant que paquet pour OpenSUSE que nous pouvons installer comme suit :

zypper install nginx

Si Apache2 est déjà installé sur le système, arrêtez-le maintenant…

systemctl stop apache2.service

… et supprimez les liens de démarrage système d’Apache :

systemctl disable apache2.service

Ensuite, nous créons les liens de démarrage système pour nginx et le démarrons :

systemctl enable nginx.service  
systemctl start nginx.service

(Si Apache2 et nginx sont tous deux installés, l’installateur ISPConfig 3 vous demandera lequel vous souhaitez utiliser - répondez nginx dans ce cas. Si l’un de ces deux est installé, ISPConfig effectuera la configuration nécessaire automatiquement.)

Si vous souhaitez utiliser des adresses IPv6 avec vos vhosts nginx, veuillez faire ce qui suit avant de créer des vhosts IPv6 dans ISPConfig :

Ouvrez /etc/sysctl.conf…

vi /etc/sysctl.conf

… et ajoutez la ligne net.ipv6.bindv6only = 1 :

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

Exécutez…

sysctl -p

… ensuite pour que le changement prenne effet.

Nous pouvons faire fonctionner PHP5 dans nginx via PHP-FPM (PHP-FPM (FastCGI Process Manager) est une implémentation PHP FastCGI alternative avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites plus fréquentés) que nous installons comme suit :

zypper install php5-fpm

Avant de démarrer PHP-FPM, renommez /etc/php5/fpm/php-fpm.conf.default en /etc/php5/fpm/php-fpm.conf :

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

Changez les permissions du répertoire de session de PHP :

chmod 1733 /var/lib/php5

Ensuite, ouvrez /etc/php5/fpm/php-fpm.conf…

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

… et changez error_log en /var/log/php-fpm.log :

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

Il n’y a pas de fichier php.ini pour PHP-FPM sous OpenSUSE 12.3, donc nous copions le php.ini CLI :

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

Ensuite, ouvrez /etc/php5/fpm/php.ini…

vi /etc/php5/fpm/php.ini

… et définissez cgi.fix_pathinfo sur 0 :

| [...] ; cgi.fix_pathinfo fournit un support *réel* pour PATH_INFO/PATH_TRANSLATED pour CGI. PHP ; le comportement précédent était de définir PATH_TRANSLATED sur SCRIPT_FILENAME, et de ne pas comprendre ; ce qu'est PATH_INFO. Pour plus d'informations sur PATH_INFO, consultez les spécifications CGI. Définir ; cela sur 1 fera en sorte que PHP CGI corrige ses chemins pour se conformer à la spécification. Un réglage ; de zéro fait que PHP se comporte comme avant. La valeur par défaut est 1. Vous devriez corriger vos scripts ; pour utiliser SCRIPT_FILENAME plutôt que PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |

Ensuite, créez les liens de démarrage système pour php-fpm et redémarrez-le :

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

PHP-FPM est un processus démon qui exécute un serveur FastCGI sur le port 9000, comme vous pouvez le voir dans la sortie de

netstat -tapn
server1:~ # netstat -tapn  
 Connexions Internet actives (serveurs et établies)  
 Proto  Recv-Q  Send-Q  Adresse locale           Adresse étrangère         État       PID/Nom du programme  
 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      ÉTABLI 1332/0  
 tcp        0      0 :::22                    :::*                    LISTEN      1275/sshd  
 tcp        0      0 ::1:25                    :::*                    LISTEN      9816/master  
 server1:~ #

Pour obtenir un support MySQL dans PHP, nous pouvons installer le paquet php5-mysql. Il est judicieux d’installer quelques autres modules PHP5 également car vous pourriez en avoir besoin pour vos applications :

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

Maintenant, redémarrez PHP-FPM :

systemctl restart php-fpm.service

Pour obtenir un support CGI dans nginx, nous installons Fcgiwrap.

Fcgiwrap est un wrapper CGI qui devrait également fonctionner pour des scripts CGI complexes et peut être utilisé pour des environnements d’hébergement partagé car il permet à chaque vhost d’utiliser son propre répertoire cgi-bin.

Comme il n’y a pas de paquet fcgiwrap pour OpenSUSE, nous devons le construire nous-mêmes. D’abord, nous installons quelques prérequis :

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

Créez les liens symboliques suivants :

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/

Maintenant, nous pouvons construire fcgiwrap comme suit :

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

Cela installe fcgiwrap dans /usr/local/sbin/fcgiwrap.

Ensuite, nous installons le paquet spawn-fcgi qui nous permet d’exécuter fcgiwrap en tant que démon :

zypper install spawn-fcgi

Nous pouvons maintenant démarrer fcgiwrap comme suit :

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

Vous devriez maintenant trouver le socket fcgiwrap dans /var/run/fcgiwrap.socket, appartenant à l’utilisateur wwwrun et au groupe www. Nous devons maintenant ajouter l’utilisateur nginx au groupe www :

usermod -a -G www nginx

Rechargez nginx ensuite :

systemctl reload nginx.service

Si vous ne souhaitez pas démarrer fcgiwrap manuellement chaque fois que vous démarrez votre système, ouvrez /etc/init.d/boot.local…

vi /etc/init.d/boot.local

… et ajoutez la commande spawn-fcgi à la fin du fichier - cela démarrera automatiquement fcgiwrap à la fin du processus de démarrage :

| [...] /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 |

C’est tout ! Maintenant, lorsque vous créez un vhost nginx, ISPConfig s’occupera de la configuration correcte du vhost.

10.1 Installer phpMyAdmin

Ensuite, nous installons phpMyAdmin :

zypper install phpMyAdmin

Comme cela installe Apache en tant que dépendance, supprimez les liens de démarrage système d’Apache :

systemctl disable apache2.service

phpMyAdmin est maintenant situé dans le répertoire /srv/www/htdocs/phpMyAdmin, mais nous voulons qu’il soit dans le répertoire /usr/share/phpmyadmin/, donc nous créons un lien symbolique :

ln -s /srv/www/htdocs/phpMyAdmin /usr/share/phpmyadmin

Après avoir installé ISPConfig 3, vous pouvez accéder à phpMyAdmin comme suit :

Le vhost d’applications ISPConfig sur le port 8081 pour nginx est livré avec une configuration phpMyAdmin, donc vous pouvez utiliser http://server1.example.com:8081/phpmyadmin ou http://server1.example.com:8081/phpMyAdmin pour accéder à phpMyAdmin.

Si vous souhaitez utiliser un alias /phpmyadmin ou /phpMyAdmin que vous pouvez utiliser depuis vos sites web, c’est un peu plus compliqué que pour Apache car nginx n’a pas d’alias globaux (c’est-à-dire des alias qui peuvent être définis pour tous les vhosts). Par conséquent, vous devez définir ces alias pour chaque vhost à partir duquel vous souhaitez accéder à phpMyAdmin.

Pour ce faire, collez ce qui suit dans le champ Directives nginx de l’onglet Options du site web dans 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; } |

Si vous utilisez http s au lieu de http pour votre vhost, vous devriez ajouter la ligne fastcgi_param HTTPS on; à votre configuration phpMyAdmin comme ceci :

| 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; # <-- ajoutez cette ligne 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; } |

Si vous utilisez à la fois http et https pour votre vhost, vous devez ajouter la section suivante à la section http {} dans /etc/nginx/nginx.conf (avant toute ligne include) qui détermine si le visiteur utilise http ou https et définit la variable $fastcgi_https (que nous utiliserons dans notre configuration phpMyAdmin) en conséquence :

vi /etc/nginx/nginx.conf

| [...] http { [...] ## Détecter quand HTTPS est utilisé map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

N’oubliez pas de recharger nginx ensuite :

systemctl reload nginx.service

Ensuite, allez à nouveau dans le champ Directives nginx, et au lieu de fastcgi_param HTTPS on; vous ajoutez la ligne fastcgi_param HTTPS $fastcgi_https; afin que vous puissiez utiliser phpMyAdmin pour les requêtes http et 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; # <-- ajoutez cette ligne 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 Installer PureFTPd

Installez le démon FTP pure-ftpd. Exécutez :

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

Maintenant, nous configurons PureFTPd pour autoriser les sessions FTP et TLS. FTP est un protocole très peu sécurisé car tous les mots de passe et toutes les données sont transférés en texte clair. En utilisant TLS, toute la communication peut être chiffrée, rendant ainsi FTP beaucoup plus sécurisé.

OpenSSL est nécessaire pour TLS ; pour installer OpenSSL, nous exécutons simplement :

zypper install openssl

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

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

Si vous souhaitez autoriser les sessions FTP et TLS, définissez TLS sur 1 :

| [...] # Cette option peut accepter trois valeurs : # 0 : désactiver la couche de chiffrement SSL/TLS (par défaut). # 1 : accepter à la fois les sessions traditionnelles et chiffrées. # 2 : refuser les connexions qui n'utilisent pas les mécanismes de sécurité SSL/TLS, # y compris les sessions anonymes. # Ne décommentez pas cela à la légère. Assurez-vous que : # 1) Votre serveur a été compilé avec le support SSL/TLS (--with-tls), # 2) Un certificat valide est en place, # 3) Seuls des clients compatibles se connecteront. TLS 1 [...] |

Si vous souhaitez accepter uniquement les sessions TLS (pas de FTP), définissez TLS sur 2 :

| [...] # Cette option peut accepter trois valeurs : # 0 : désactiver la couche de chiffrement SSL/TLS (par défaut). # 1 : accepter à la fois les sessions traditionnelles et chiffrées. # 2 : refuser les connexions qui n'utilisent pas les mécanismes de sécurité SSL/TLS, # y compris les sessions anonymes. # Ne décommentez pas cela à la légère. Assurez-vous que : # 1) Votre serveur a été compilé avec le support SSL/TLS (--with-tls), # 2) Un certificat valide est en place, # 3) Seuls des clients compatibles se connecteront. TLS 2 [...] |

Pour ne pas autoriser TLS du tout (uniquement FTP), définissez TLS sur 0 :

| [...] # Cette option peut accepter trois valeurs : # 0 : désactiver la couche de chiffrement SSL/TLS (par défaut). # 1 : accepter à la fois les sessions traditionnelles et chiffrées. # 2 : refuser les connexions qui n'utilisent pas les mécanismes de sécurité SSL/TLS, # y compris les sessions anonymes. # Ne décommentez pas cela à la légère. Assurez-vous que : # 1) Votre serveur a été compilé avec le support SSL/TLS (--with-tls), # 2) Un certificat valide est en place, # 3) Seuls des clients compatibles se connecteront. TLS 0 [...] |

Pour utiliser TLS, nous devons créer un certificat SSL. Je le crée dans /etc/ssl/private/, donc je crée d’abord ce répertoire :

mkdir -p /etc/ssl/private/

Ensuite, nous pouvons générer le certificat SSL comme suit :

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Nom du pays (code à 2 lettres) [AU] : <– Entrez le nom de votre pays (par exemple, “DE”).
Nom de l’État ou de la province (nom complet) [Some-State] : <– Entrez le nom de votre État ou province.
Nom de la localité (par exemple, ville) [] : <– Entrez votre ville.
Nom de l’organisation (par exemple, entreprise) [Internet Widgits Pty Ltd] : <– Entrez le nom de votre organisation (par exemple, le nom de votre entreprise).
Nom de l’unité organisationnelle (par exemple, section) [] : <– Entrez le nom de votre unité organisationnelle (par exemple, “Département IT”).
Nom commun (par exemple, VOTRE nom) [] : <– Entrez le nom de domaine entièrement qualifié du système (par exemple, “server1.example.com”).
Adresse e-mail [] : <– Entrez votre adresse e-mail.

Changez les permissions du certificat SSL :

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

Enfin, redémarrez PureFTPd :

systemctl restart pure-ftpd.service

C’est tout. Vous pouvez maintenant essayer de vous connecter en utilisant votre client FTP ; cependant, vous devriez configurer votre client FTP pour utiliser TLS - voir le chapitre suivant comment faire cela avec FileZilla.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.