우분투 20.04 이후부터 nginX 재부팅 혹은 재시작시에 bind 에러가 나타날때
우분투 20.04를 사용한 이후에 nginX 설정을 바꾼 후 nginX를 재시작 시키면 항상 에러가 튀어나왔다.
systemctl status nginx.service 로 확인을 해보면 다음과 같은 상황이 발생한다.
:~# systemctl status nginx.service
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active:<strong> failed</strong> (Result: exit-code) since Mon 2020-07-27 18:58:53 KST; 11s ago
Docs: http://nginx.org/en/docs/
Process: 34135 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
Jul 27 18:58:51 happist.com systemd[1]: Starting nginx - high performance web server…
Jul 27 18:58:51 happist.com nginx[34135]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Jul 27 18:58:51 happist.com nginx[34135]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Jul 27 18:58:52 happist.com nginx[34135]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Jul 27 18:58:52 happist.com nginx[34135]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Jul 27 18:58:53 happist.com nginx[34135]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Jul 27 18:58:53 happist.com nginx[34135]: nginx: [emerg] still could not bind()
Jul 27 18:58:53 happist.com systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
Jul 27 18:58:53 happist.com systemd[1]: <strong><span style="color: #fcb900;" class="ugb-highlight">nginx.service: Failed with result 'exit-code'.</span></strong>
Jul 27 18:58:53 happist.com systemd[1]: <strong><span style="color: #cf2e2e;" class="ugb-highlight">Failed to start nginx - high performance web server.</span></strong>
이게 무슨 상황인가 싶어서 찾아봤더니 80번 포트의 중복사용으로 인한 에러.
보통 인터넷에서는 같은 80번 포트를 사용하는 아파치2 서버를 죽이면 된다지만, 나는 Apache2 웹서버는 설치도 하지 않는다.
어렵사리 찾아서 해결한 요인은 IPv6 때문…
nginX의 /etc/nginx/sites-available/default 설정파일에서 다음 부분을 수정해준다.
# Default server configuration
#
server {
listen 80 default_server;
listen [::]:80 default_server;
위의 내용을 아래와 같이
# Default server configuration
# server {
listen 80;
listen [::]:80 ipv6only=on default_server;
이렇게 바꿔주었다고 해도 다시 nignX만 재시작 하긴 힘들다.
이럴때는 강제로 80번 포트를 사용하는 프로세스를 다 죽이고 재시작을 시킨다.
sudo fuser -k 80/tcp
sudo service nginx restart