Skip to Content
DocumentationServeurNginx & Apache

Serveurs Web Nginx / Apache

Différences de version 26.10

26.10 utilise OpenSSL 4. Migrez la configuration ENGINE héritée vers les fournisseurs, en particulier pour l’intégration PKCS#11/HSM. Valider la configuration et les chaînes de certificats avant de recharger les services ; l’installation du package à elle seule n’établit pas la compatibilité. Notes de version officielles 

Cet article couvre l’installation et la configuration des deux serveurs Web les plus populaires sur Ubuntu 26.04 : Nginx et Apache.

Nginx

Installation d’Nginx

sudo apt update sudo apt install nginx -y # Start and enable on boot sudo systemctl enable --now nginx # Check status sudo systemctl status nginx # Check version nginx -v

Configuration du pare-feu

# Allow HTTP and HTTPS sudo ufw allow 'Nginx Full' # Or allow individually sudo ufw allow 80/tcp sudo ufw allow 443/tcp

Structure du répertoire

/etc/nginx/ ├── nginx.conf # Main configuration file ├── sites-available/ # Available site configurations ├── sites-enabled/ # Enabled sites (symlinks) ├── conf.d/ # Additional configuration snippets ├── snippets/ # Reusable configuration snippets └── modules-enabled/ # Enabled modules /var/www/ # Website root directory /var/log/nginx/ # Log directory

Configuration de l’hôte virtuel

# Create website directory sudo mkdir -p /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html # Create virtual host configuration sudo tee /etc/nginx/sites-available/example.com << 'EOF' server { listen 80; listen [::]:80; server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; # Logs access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location / { try_files $uri $uri/ =404; } # Static asset caching location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; } # Deny access to hidden files location ~ /\. { deny all; } } EOF # Enable the site sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ # Remove default site (optional) sudo rm /etc/nginx/sites-enabled/default # Test configuration sudo nginx -t # Reload sudo systemctl reload nginx

Configuration du proxy inverse

sudo tee /etc/nginx/sites-available/app-proxy << 'EOF' server { listen 80; server_name app.example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $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 $scheme; # WebSocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } EOF sudo ln -s /etc/nginx/sites-available/app-proxy /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

Nginx Réglage des performances

# /etc/nginx/nginx.conf key settings sudo tee /etc/nginx/conf.d/performance.conf << 'EOF' # Gzip compression gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 5; gzip_min_length 256; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml application/rss+xml image/svg+xml; # File caching open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; # Connection optimization keepalive_timeout 65; keepalive_requests 100; EOF sudo nginx -t && sudo systemctl reload nginx

Apache

Installation d’Apache

sudo apt update sudo apt install apache2 -y # Start and enable on boot sudo systemctl enable --now apache2 # Check status sudo systemctl status apache2 # Check version apache2 -v

Configuration du pare-feu

sudo ufw allow 'Apache Full'

Structure du répertoire

/etc/apache2/ ├── apache2.conf # Main configuration file ├── ports.conf # Listening ports ├── sites-available/ # Available site configurations ├── sites-enabled/ # Enabled sites ├── mods-available/ # Available modules ├── mods-enabled/ # Enabled modules └── conf-available/ # Additional configuration /var/www/ # Website root directory /var/log/apache2/ # Log directory

Gestion des modules communs

# Enable modules sudo a2enmod rewrite # URL rewriting sudo a2enmod ssl # SSL/TLS sudo a2enmod headers # HTTP header control sudo a2enmod proxy # Reverse proxy sudo a2enmod proxy_http # HTTP proxy sudo a2enmod proxy_wstunnel # WebSocket proxy # Disable a module sudo a2dismod autoindex # Restart to apply changes sudo systemctl restart apache2

Configuration de l’hôte virtuel

# Create website directory sudo mkdir -p /var/www/example.com/html sudo chown -R www-data:www-data /var/www/example.com echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html # Create virtual host configuration sudo tee /etc/apache2/sites-available/example.com.conf << 'EOF' <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin admin@example.com DocumentRoot /var/www/example.com/html <Directory /var/www/example.com/html> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> # Logs ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined </VirtualHost> EOF # Enable the site sudo a2ensite example.com.conf # Disable the default site (optional) sudo a2dissite 000-default.conf # Test configuration sudo apache2ctl configtest # Reload sudo systemctl reload apache2

Configuration du proxy inverse

sudo a2enmod proxy proxy_http sudo tee /etc/apache2/sites-available/app-proxy.conf << 'EOF' <VirtualHost *:80> ServerName app.example.com ProxyPreserveHost On ProxyPass / http://127.0.0.1:3000/ ProxyPassReverse / http://127.0.0.1:3000/ # WebSocket proxy RewriteEngine On RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) ws://127.0.0.1:3000/$1 [P,L] ErrorLog ${APACHE_LOG_DIR}/app-proxy-error.log CustomLog ${APACHE_LOG_DIR}/app-proxy-access.log combined </VirtualHost> EOF sudo a2ensite app-proxy.conf sudo apache2ctl configtest && sudo systemctl reload apache2

Configuration du certificat SSL

Utilisation de Let’s Encrypt (Certbot)

# Install Certbot sudo apt install certbot -y # Nginx plugin sudo apt install python3-certbot-nginx -y # Apache plugin sudo apt install python3-certbot-apache -y

Configuration SSL Nginx

# Automatically obtain and configure certificates sudo certbot --nginx -d example.com -d www.example.com # Test automatic renewal sudo certbot renew --dry-run # View certificate information sudo certbot certificates

Certbot modifiera automatiquement la configuration Nginx pour :

server { listen 443 ssl; listen [::]:443 ssl; http2 on; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # ... other configuration } # HTTP to HTTPS redirect server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }

Configuration SSL Apache

# Enable the SSL module sudo a2enmod ssl # Automatically obtain and configure certificates sudo certbot --apache -d example.com -d www.example.com

Configuration SSL manuelle (Nginx)

sudo tee /etc/nginx/snippets/ssl-params.conf << 'EOF' ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # HSTS add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; resolver 223.5.5.5 8.8.8.8 valid=300s; EOF

Renouvellement automatique

# Certbot automatically configures a systemd timer during installation sudo systemctl status certbot.timer # Manual renewal sudo certbot renew # View the renewal schedule sudo systemctl list-timers | grep certbot

Nginx vs Apache : choisir le bon

ScénarioRecommandationRaison
Fichiers statiques à haute concurrenceNginxFaible utilisation de la mémoire, pilotée par les événements
Exigences .htaccessApachePrise en charge native de la configuration au niveau du répertoire
Proxy inverse / équilibrage de chargeNginxConfiguration propre, excellentes performances
PHP (PHP-FPM)SoitLes deux prennent en charge FastCGI ; recommandé sur 26.04
Passerelle de microservicesNginxMieux adapté aux scénarios de passerelle API
Warning

Sur Ubuntu 26.04, le service Apache 2.4.66 active MemoryDenyWriteExecute=yes par défaut, ce qui provoque le blocage de libapache2-mod-php. La recommandation officielle est d’utiliser PHP-FPM (mod_proxy_fcgi + php-fpm) au lieu du mod_php intégré.

Commandes de gestion communes

# Nginx sudo nginx -t # Test configuration sudo systemctl reload nginx # Graceful reload sudo systemctl restart nginx # Restart sudo tail -f /var/log/nginx/access.log # View access log # Apache sudo apache2ctl configtest # Test configuration sudo systemctl reload apache2 # Graceful reload sudo systemctl restart apache2 # Restart sudo a2ensite site.conf # Enable site sudo a2dissite site.conf # Disable site sudo a2enmod module # Enable module sudo a2dismod module # Disable module sudo tail -f /var/log/apache2/access.log # View access log

Articles connexes

  • Docker Compose Service Orchestration — Déployer des services Web à l’aide de Docker Compose conteneurs
  • Bases d’SSH — SSH connexions à distance et gestion des clés, compétences essentielles pour l’administration du serveur
  • UFW Firewall — Configurer les règles de pare-feu pour les serveurs Web, ouvrir les ports HTTP/HTTPS