Problème : Erreur d'adresse déjà utilisée par NGINX
Lors du démarrage ou du redémarrage de NGINX, vous pouvez voir le message d'erreur "nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)". Cette erreur survient lorsque NGINX essaie de se lier au port 80, mais qu'un autre processus utilise déjà ce port. Cela empêche NGINX de démarrer et affecte le fonctionnement de votre serveur web.
Solutions pour résoudre l'erreur de liaison NGINX
Arrêter les services en conflit
Pour résoudre l'erreur de liaison NGINX, arrêtez les autres serveurs web ou services utilisant le port 80. Vérifiez si Apache est en cours d'exécution :
sudo systemctl status apache2
Si Apache est actif, arrêtez-le :
sudo systemctl stop apache2
Pour empêcher Apache de démarrer au démarrage du système :
sudo systemctl disable apache2
Utilisez netstat
pour identifier les autres services utilisant le port 80 :
sudo netstat -tuln | grep :80
Arrêtez les services en conflit :
sudo systemctl stop nom_du_service
Modifier la configuration du port NGINX
Si l'arrêt des services ne fonctionne pas, changez le port de NGINX. Modifiez le fichier de configuration NGINX :
sudo nano /etc/nginx/nginx.conf
Trouvez la directive listen
et changez-la pour un port alternatif, comme 8080 :
server {
listen 8080;
# Autres paramètres
}
Sauvegardez le fichier et redémarrez NGINX :
sudo systemctl restart nginx
Configurer NGINX comme proxy inverse
Configurez NGINX comme proxy inverse pour travailler avec d'autres serveurs web. Modifiez le bloc serveur dans votre configuration NGINX :
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Cette configuration transfère les requêtes à un autre serveur web fonctionnant sur le port 8080. Ajustez la directive proxy_pass
selon votre configuration. Après avoir effectué les modifications, redémarrez NGINX :
sudo systemctl restart nginx
Dépannage avancé pour les erreurs de liaison persistantes
Examiner les problèmes liés à IPv6
Si vous rencontrez toujours des erreurs de liaison après avoir essayé les solutions précédentes, des problèmes liés à IPv6 peuvent en être la cause. Pour désactiver IPv6 dans la configuration NGINX, modifiez le fichier de configuration NGINX :
sudo nano /etc/nginx/nginx.conf
Changez la directive listen
pour spécifier IPv4 :
listen 80 ipv4only=on;
Pour les problèmes de liaison double pile, assurez-vous que votre serveur prend en charge IPv6. Sinon, supprimez ou commentez les directives d'écoute IPv6 :
# listen [::]:80;
Résoudre les conflits de permissions et de propriété
Les problèmes de permissions et de propriété peuvent causer des erreurs de liaison. Vérifiez les permissions des fichiers NGINX :
ls -l /etc/nginx/nginx.conf
Le fichier doit appartenir à root et avoir les permissions 644. Si ce n'est pas le cas, corrigez-le :
sudo chown root:root /etc/nginx/nginx.conf
sudo chmod 644 /etc/nginx/nginx.conf
Assurez-vous que NGINX s'exécute avec l'utilisateur et le groupe corrects. Modifiez le fichier de configuration NGINX :
sudo nano /etc/nginx/nginx.conf
Vérifiez la directive user :
user www-data;
Si nécessaire, changez-la pour l'utilisateur approprié. Après avoir effectué les modifications, redémarrez NGINX :
sudo systemctl restart nginx
Ces étapes devraient aider à résoudre les erreurs de liaison persistantes liées à IPv6 et aux permissions.
Considérations supplémentaires pour la configuration de NGINX
Configurer SSL/TLS avec Certbot
Lors de la configuration de SSL/TLS avec Certbot pour HTTPS, vous pouvez rencontrer des problèmes de liaison au port 443. Pour résoudre ce problème :
-
Vérifiez si le port 443 est utilisé :
sudo netstat -tuln | grep :443
-
Si un autre service utilise le port 443, arrêtez-le ou changez NGINX pour utiliser un port différent.
-
Installez Certbot :
sudo apt-get update sudo apt-get install certbot python3-certbot-nginx
-
Exécutez Certbot pour obtenir et installer les certificats SSL :
sudo certbot --nginx
-
Suivez les étapes pour choisir votre domaine et décider si vous voulez rediriger le trafic HTTP vers HTTPS.
-
Certbot modifiera votre configuration NGINX pour utiliser les certificats SSL.
-
Testez votre configuration HTTPS en visitant votre site web en utilisant https://.
Utiliser NGINX dans des environnements Docker
Lors de l'utilisation de NGINX dans Docker, il est important de gérer correctement les conflits de ports et l'exposition des ports :
-
Pour éviter les conflits de ports, mappez les ports du conteneur à différents ports de l'hôte :
docker run -p 8080:80 nginx
Cela mappe le port 80 du conteneur au port 8080 de l'hôte.
-
Pour plusieurs conteneurs, utilisez différents ports de l'hôte :
docker run -p 8081:80 nginx docker run -p 8082:80 another-nginx
-
Dans votre Dockerfile, exposez les ports nécessaires :
EXPOSE 80 EXPOSE 443
-
Avec Docker Compose, spécifiez les mappages de ports dans votre docker-compose.yml :
services: nginx: image: nginx ports: - "8080:80" - "443:443"
-
Pour les applications conteneurisées derrière NGINX, utilisez le réseau interne de Docker :
services: nginx: image: nginx ports: - "80:80" app: image: your-app expose: - "3000"
-
Configurez NGINX pour transférer les requêtes à votre application en utilisant le nom du service :
location / { proxy_pass http://app:3000; }