Description
Nginx, prononcé "engine-x", est un logiciel de serveur web open-source hautement performant, réputé pour sa rapidité, son efficacité et sa scalabilité. Initialement développé par Igor Sysoev en 2004 pour résoudre le problème des 10 000 connexions simultanées (C10k), il a depuis gagné en popularité et est largement utilisé comme serveur proxy inverse, répartiteur de charge, cache HTTP, et comme proxy frontal pour divers protocoles tels que HTTP, HTTPS, SMTP, POP3 et IMAP.
Les caractéristiques clés de Nginx incluent :
Performance : Nginx est conçu pour gérer efficacement les connexions concurrentes et les charges de trafic élevées, ce qui en fait un choix populaire pour les sites web et les applications web à fort trafic.
Concurrence : Son architecture asynchrone et événementielle permet à Nginx de gérer des milliers de connexions simultanées avec une consommation minimale de ressources.
Proxy Inverse : Nginx peut agir comme un proxy inverse, redirigeant les requêtes des clients vers d'autres serveurs tels que des serveurs d'applications ou d'autres serveurs web. Cela est couramment utilisé pour l'équilibrage de charge et la mise en cache.
Équilibrage de Charge : Nginx peut répartir les requêtes des clients sur plusieurs serveurs pour assurer une utilisation optimale des ressources et une haute disponibilité.
Mise en Cache HTTP : Il offre une prise en charge intégrée pour la mise en cache du contenu statique et dynamique, réduisant la charge du serveur et améliorant les performances du site web.
Terminaison TLS/SSL : Nginx peut mettre fin aux connexions SSL/TLS, déchargeant le processus de déchiffrement SSL des serveurs d'application, ce qui améliore la sécurité et les performances.
Support des WebSockets : Nginx prend en charge les WebSockets, permettant une communication en temps réel entre les clients et les serveurs sur une seule connexion longue durée.
Support HTTP/2 : Nginx prend en charge le protocole HTTP/2, qui offre des améliorations de performance par rapport au protocole HTTP/1.x en permettant à plusieurs requêtes et réponses d'être multiplexées sur une seule connexion.
Flexibilité de Configuration : La syntaxe de configuration de Nginx est flexible et puissante, permettant aux utilisateurs de personnaliser le comportement du serveur selon leurs besoins spécifiques.
En résumé, Nginx est une solution de serveur web et de serveur proxy polyvalente et puissante utilisée par des millions de sites web dans le monde entier pour fournir des applications web performantes et scalables.
Installation
Configuration d'un serveur Web Nginx avec PHP
Nous allons voir comment installer et configurer notre plateforme.
Système de base : Debian 11
Installation de Nginx et php8.1
apt-get -y update && sudo apt-get -y upgrade
sudo apt-get install apt-transport-https lsb-release ca-certificates wget
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt-get update
apt install nginx php8.1 php8.1-fpm php8.1-mysql php8.1-xml mariadb-server letsencrypt python3-certbot-nginx
Installation de Symfony
curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | sudo -E bash
sudo apt install symfony-cli
Installation de Composer
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
Génération des certificats
sudo certbot --authenticator standalone --installer nginx \
-d vps.mirim.fr \
-d bim.mirim.fr \
--pre-hook "service nginx stop" --post-hook "service nginx start"
Edition du fichier /etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
location /sitephp56 {
root /home/michael/Web/;
index index.php index.html index.htm;
location ~ ^/sitephp56/(.+.php)$ {
try_files $uri =404;
root /home/michael/Web/;
fastcgi_pass unix:/run/php/php5.6-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/sitephp56/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /home/michael/Web/;
}}
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:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
location ~* ^/phpmyadmin/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
location /phpMyAdmin {
rewrite ^/* /phpmyadmin last;
}
root /home/michael/Web;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ .php$ {
fastcgi_index index.php;
fastcgi_keep_conn on;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
server {
listen 80;
server_name bim.mirim.fr;
return 301 https://$server_name$request_uri;
}
server {
# listen 443 ssl;
# add Strict-Transport-Security to prevent man in the middle attacks
add_header Strict-Transport-Security "max-age=31536000";
server_name wasac.mirim.fr;
root "/var/www/Wasac/public";
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/vps.mirim.fr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/vps.mirim.fr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location / {
try_files $uri /index.php$is_args$args;
}
## Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 360d;
}
location ~ /\.ht {
deny all;
}
location ~ /(libraries|setup/frames|setup/libs) {
deny all;
return 404;
}
location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
error_log /var/log/nginx/wasac-error.log;
access_log /var/log/nginx/wasac-access.log;
}
Modifié le