Nginx will not start (Address already in use)

Probably other process is using specified port:

sudo netstat -tulpn

Get the PID of the process that already using 443. And send signal with kill command.

sudo kill -2 <PID>

sudo service nginx restart

Aternatively you can do:

sudo fuser -k 443/tcp

Make sure you dont use old syntax:

server {
    listen :80;
    listen [::]:80;
}

The above syntax will cause

nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)

Correct syntax:

server {
    listen 80;
    listen [::]:80 ipv6only=on;
}

or

server {
    listen [::]:80;
}

Both above syntax will achieve the same thing, listening on both ipv4 and ipv6.


First, we have to check how many services run on port 80. To check that, you could run the following command:

sudo netstat -plant | grep 80

This would show you which service exactly is listening on port 80 and then you can make a decision whether you want to have that service as is or have Nginx instead.

If it is Apache, you will need to decide whether you want to use Apache or Nginx.

If you only want to have Nginx, you need to stop Apache first:

sudo systemctl stop apache2 && sudo systemctl start nginx

Another way (from my experience) is just force quit the process that running on that port 443

sudo fuser -k 443/tcp 

or if you running on port 80 just change the port to

sudo fuser -k 80/tcp

Hope it helps someone who had the same issue

Alternative using lsof:

Find the PID & kill the process which running on port 443

sudo kill -9 $(lsof -t -i :443)

Thank you for the answer. After running

sudo netstat -tulpn

I realised that I had apache2 running on port 80. This was probably done after I used Certbot to install SSL on the server. I removed Apache2 and the server was up and running.

apt remove apache2

This did the trick! Thank you again.

Tags:

Nginx