Hoe je de 'nginx - nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)' Fout kunt Oplossen

Gepubliceerd 29 juni 2024

Probleem: NGINX Adres Reeds In Gebruik Fout

Bij het starten of herstarten van NGINX, kun je de foutmelding "nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)" zien. Deze fout treedt op wanneer NGINX probeert te binden aan poort 80, maar een ander proces de poort gebruikt. Dit verhindert NGINX te starten en beïnvloedt de werking van je webserver.

Oplossingen Om De Nginx Bind Fout Op Te Lossen

Conflicterende Diensten Stoppen

Om de Nginx bind fout op te lossen, stop andere webservers of diensten die poort 80 gebruiken. Controleer of Apache draait:

sudo systemctl status apache2

Als Apache actief is, stop het dan:

sudo systemctl stop apache2

Om te voorkomen dat Apache bij het opstarten van het systeem start:

sudo systemctl disable apache2

Gebruik netstat om andere diensten te identificeren die poort 80 gebruiken:

sudo netstat -tuln | grep :80

Stop conflicterende diensten:

sudo systemctl stop service_name

Nginx Poort Configuratie Wijzigen

Als het stoppen van diensten niet werkt, wijzig dan de poort van Nginx. Bewerk het Nginx configuratiebestand:

sudo nano /etc/nginx/nginx.conf

Zoek de listen richtlijn en wijzig deze naar een alternatieve poort, zoals 8080:

server {
    listen 8080;
    # Andere instellingen
}

Bewaar het bestand en herstart Nginx:

sudo systemctl restart nginx

Nginx Configureren Als Een Reverse Proxy

Stel Nginx in als een reverse proxy om samen te werken met andere webservers. Bewerk het server blok in je Nginx configuratie:

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;
    }
}

Deze configuratie stuurt verzoeken door naar een andere webserver die draait op poort 8080. Pas de proxy_pass richtlijn aan om overeen te komen met je setup. Herstart Nginx na het maken van wijzigingen:

sudo systemctl restart nginx

Geavanceerde Probleemoplossing Voor Hardnekkige Bind Fouten

IPv6 Gerelateerde Problemen Onderzoeken

Als je nog steeds bind fouten hebt na het proberen van de vorige oplossingen, kunnen IPv6-gerelateerde problemen de oorzaak zijn. Om IPv6 uit te schakelen in de Nginx configuratie, bewerk het Nginx configuratiebestand:

sudo nano /etc/nginx/nginx.conf

Wijzig de listen richtlijn om IPv4 te specificeren:

listen 80 ipv4only=on;

Voor dual-stack bindingsproblemen, zorg ervoor dat je server IPv6 ondersteunt. Zo niet, verwijder of commentarieer IPv6 listen richtlijnen uit:

# listen [::]:80;

Permissie En Eigendom Conflicten Oplossen

Permissie en eigendom problemen kunnen bind fouten veroorzaken. Controleer Nginx bestandspermissies:

ls -l /etc/nginx/nginx.conf

Het bestand moet eigendom zijn van root en 644 permissies hebben. Zo niet, corrigeer het:

sudo chown root:root /etc/nginx/nginx.conf
sudo chmod 644 /etc/nginx/nginx.conf

Zorg ervoor dat Nginx draait met de juiste gebruiker en groep. Bewerk het Nginx configuratiebestand:

sudo nano /etc/nginx/nginx.conf

Controleer de user richtlijn:

user www-data;

Indien nodig, wijzig het naar de juiste gebruiker. Herstart Nginx na het maken van wijzigingen:

sudo systemctl restart nginx

Deze stappen zouden moeten helpen om hardnekkige bind fouten gerelateerd aan IPv6 en permissies op te lossen.

Aanvullende Overwegingen Voor Nginx Setup

SSL/TLS Configureren Met Certbot

Bij het instellen van SSL/TLS met Certbot voor HTTPS, kun je poort 443 bind problemen tegenkomen. Om dit op te lossen:

  1. Controleer of poort 443 in gebruik is:

    sudo netstat -tuln | grep :443
  2. Als een andere dienst poort 443 gebruikt, stop deze dan of wijzig Nginx om een andere poort te gebruiken.

  3. Installeer Certbot:

    sudo apt-get update
    sudo apt-get install certbot python3-certbot-nginx
  4. Voer Certbot uit om SSL certificaten te verkrijgen en installeren:

    sudo certbot --nginx
  5. Volg de stappen om je domein te kiezen en te bepalen of je HTTP verkeer wilt doorsturen naar HTTPS.

  6. Certbot zal je Nginx configuratie wijzigen om de SSL certificaten te gebruiken.

  7. Test je HTTPS setup door je website te bezoeken met https://.

Nginx Gebruiken In Docker Omgevingen

Bij het gebruik van Nginx in Docker is het beheren van poort conflicten en het correct blootstellen van poorten belangrijk:

  1. Om poort conflicten te vermijden, koppel container poorten aan verschillende host poorten:

    docker run -p 8080:80 nginx

    Dit koppelt container poort 80 aan host poort 8080.

  2. Voor meerdere containers, gebruik verschillende host poorten:

    docker run -p 8081:80 nginx
    docker run -p 8082:80 another-nginx
  3. In je Dockerfile, stel de benodigde poorten bloot:

    EXPOSE 80
    EXPOSE 443
  4. Bij gebruik van Docker Compose, specificeer poort koppelingen in je docker-compose.yml:

    services:
    nginx:
    image: nginx
    ports:
      - "8080:80"
      - "443:443"
  5. Voor gecontaineriseerde apps achter Nginx, gebruik Docker's interne netwerken:

    services:
    nginx:
    image: nginx
    ports:
      - "80:80"
    app:
    image: your-app
    expose:
      - "3000"
  6. Stel Nginx in om verzoeken door te sturen naar je app met behulp van de service naam:

    location / {
    proxy_pass http://app:3000;
    }