Nginx
Updated 7 Mai 2021
Installation et configuration de Nginx
Commencez par installer Nginx :
emerge -a www-servers/nginx
Configuration Nginx
Tous les paramètres de Nginx sont stockés dans /etc/nginx/nginx.conf. Les paramètres spécifiques de sites Internet sont stockés dans /etc/nginx/sites-enabled.
Lancez Nginx :
/etc/init.d/nginx start
Ajoutez Nginx à la liste de démarrage automatique :
rc-update add nginx
Exemples de configuration Nginx
Créez un fichier de configuration pour localhost :
server { listen 80; server_name localhost; access_log /var/log/nginx/localhost.access_log main; error_log /var/log/nginx/localhost.error_log info; root /var/calculate/www/localhost/htdocs; }
Créez un fichier index pour vérifier l'état du serveur :
mkdir -p /var/calculate/www/localhost/htdocs
echo 'Hello!' > /var/calculate/www/localhost/htdocs/index.html
Avant de redémarrer Nginx, pensez toujours à faire une vérification avec nginx -t
.
Si c'est bon, le message suivant sera affiché :
nginx -t
nginx: le fichier de configuration /etc/nginx/nginx.conf syntax is ok nginx: fichier de configuration /etc/nginx/nginx.conf test is successful
Si cela a réussi, relisez la configuration de Nginx:
/etc/init.d/nginx reload
Pour vérifier que Nginx fonctionne, utilisez la console web curl :
curl http://localhost
Bonjour!
Configuration de HTTPS pour Nginx
Créez une clé DH :
Generating DH parameters, 4096 bit long safe prime, generator 2 This is going to take a long time
Créer un fichier décrivant les paramètres généraux de SSL :
# This file contains important security parameters. If you modify this file # manually, Certbot will be unable to automatically provide future security # updates. Instead, Certbot will print and log an error message with a path to # the up-to-date file that you will need to refer to when manually updating # this file. ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; ssl_dhparam /etc/nginx/ssl-dhparams.pem;
Getting a Let's Encrypt certificate
Procurez-vous les certificats de domaine www.example.org et example.org~ pour Nginx, comme expliqué dans le manuel.
Exemple de configuration de l'HTTPS
Ajoutez les paramètres HTTPS pour example.org :
server { listen 80; listen 443 ssl; server_name www.example.org example.org; include ssl.conf; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; include acme.conf; root /var/calculate/www/example.org/htdocs; }
Redirection de HTTP vers HTTPS
Ajoutez la règle redirigeant de http://example.org vers https://example.org :
server { listen 80; listen 443 ssl; server_name www.example.org example.org; include ssl.conf; ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; include acme.conf; if ($scheme = http) { return 301 https://$server_name$request_uri; } root /var/calculate/www/example.org/htdocs; }
Installer et configurer PHP-FPM
PHP-FPM (FastCGI Process Manager) est une interface performante et modulable permettant de gérer l'interaction entre un serveur web et une application web. Il s'agit d'une évolution de la technologie CGI. Le principal avantage de FastCGI est de séparer le langage dynamique du serveur web. Cette technologie permet d'exécuter des serveurs Web et des processus CGI sur plusieurs hôtes, offrant une plus grande souplesse et une meilleure sécurité sans perte notable de performances.
Pour installer PHP-FPM, exécutez :
emerge -a dev-lang/php
Dès que toutes les informations nécessaires à l'installation sont affichées, vous pouvez valider la version par défaut de PHP. Vous pouvez annuler l'installation et spécifier la version requise de PHP lors du prochain essai d'installation Utilisez l'option php -m
pour afficher toutes les extensions disponibles et en cours d'exécution.
Использование UNIX-сокета для взаимодействия Nginx c PHP является предпочтительным и рекомендуемым вариантом!
Indiquez le fuseau horaire en modifiant le fichier de configuration en conséquence :
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = "Europe/Paris"
Note
Dans l'exemple ci-dessus, le chemin d'accès est celui de PHP 7.4. Si vous utilisez une version différente de PHP, modifiez-le en conséquence.
Démarrez le service PHP-FPM :
/etc/init.d/php-fpm start
Mettez PHP-FPM sur la liste de démarrage automatique :
rc-update add php-fpm
Exemple de configuration de Nginx avec du code PHP
Pour fournir le support PHP, ajoutez ce qui suit à la configuration du site fonctionnant sous Nginx. Dans l'exemple ci-dessous, Nginx échange des informations avec le processus PHP via un socket UNIX. Dans le bloc serveur, ajoutez un bloc d'emplacement, réservé aux règles de fonctionnement de PHP.
Appliquer les réglages:
# localhost server { listen 80; server_name www.example.org example.org; access_log /var/log/nginx/example.org.access_log main; error_log /var/log/nginx/example.org.error_log info; root /var/calculate/www/localhost/htdocs; location ~ \.php$ { # Checking for nonexistent scripts or 404 error # Without this line, nginx will send to php-fpm immediately all requests ending by .php try_files $uri =404; include /etc/nginx/fastcgi.conf; fastcgi_pass unix:/run/php-fpm.socket; } }
Créez un fichier et mettez le code pour la sortie d'informations sur PHP dans ce fichier :
echo '<?php phpinfo(); ?>' > /var/calculate/www/localhost/htdocs/info.php
Modifier les droits d'accès pour tous les fichiers du dossier racine du site :
chown -R nginx:nginx /var/calculate/www/localhost/htdocs
Ajoutez l'entrée correspondante au DNS. En l'absence de DNS, vous pouvez ajouter l'entrée à la table statique des noms de l'ordinateur à partir duquel le site sera accessible.
Pour les systèmes basés sur Linux, modifiez la liste des noms de domaine :
192.168.0.1 www.example.org example.org
Vérifiez que Nginx a été configuré correctement et relisez le fichier :
nginx -t && /etc/init.d/nginx reload
Exécutez PHP-FPM :
/etc/init.d/php-fpm start
Tapez http://example.org/info.php dans votre navigateur Web. Si tout va bien, vous verrez une page avec des informations complètes sur PHP.
Configurer le serveur mandataire inverse sur Nginx
Un proxy inverse est généralement considéré comme un serveur qui reçoit une requête d'un client, mais qui ne la traite pas de manière indépendante, mais l'envoie en tout ou en partie à d'autres serveurs (en amont). En d'autres termes, il ne redirige pas le client, mais envoie une requête de son propre chef et renvoie ensuite la réponse au client.
Configurons un proxy inverse, exemple.org~ communiquant avec un service HTTP interne via le port 8080~ :
server { listen 80; server_name www.example.org example.org; access_log /var/log/nginx/proxy.log; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } }
Ne pas traiter les sites qui n'ont pas de description
Il est possible que Nginx refuse les requêtes contenant un nom de domaine aléatoire. Si c'est le cas, demandez à Nginx d'envoyer une réponse négative et d'interrompre la connexion avec les sites qui n'ont pas de description :
server { listen 80 default_server; server_name _; access_log /var/log/nginx/noname_80.access_log main; return 444; } server { listen 443 ssl default_server; ssl_ciphers aNULL; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_tickets off; server_name _; access_log /var/log/nginx/noname_443.access_log main; return 444; }
Actualiser les paramètres de Nginx :
/etc/init.d/nginx reload