NAS & ODROID/NAS, ODROID

OMV3 Nginx 플러그인 충돌 - DDNS 적용이 안 되는 이유와 임시 해결 방법

awesometic 2018. 3. 9. 16:20
반응형

웹 서버 추가 시 NGINX 플러그인 충돌

오랜만에 OMV 관련 게시글을 남기네요 :)

최근 제 OMV 게시글 중 Seafile 관련해서 DDNS 적용이 안 된다는 분들이 많았는데요, OMV를 오랜만에 설치해 확인해보니 정말 안 되더라구요. 후..

SSH 로 접속해서 왜 안 되나 봤더니, 일단 Nginx 플러그인으로 웹 서버를 추가하는 순간부터 안 됩니다.

추가해볼게요.

이런 식으로, 이름 기반 웹 서버를 추가해볼게요. 이름 기반일 경우 기본 HTTP 포트인 80번을 사용합니다.

적용해보면 세상 깔끔하게 죽습니다. 적용하는 순간 내부적으로 Nginx가 다시 실행되는데, 실행에 실패해 죽는 겁니다. 터미널로 접속해 확인해보죠.

service nginx status
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2018-03-09 16:01:25 KST; 1s ago
  Process: 8325 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
  Process: 8918 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)
  Process: 8912 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 32060 (code=exited, status=0/SUCCESS)

Mar 09 16:01:23 odroidxu4 nginx[8918]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Mar 09 16:01:23 odroidxu4 nginx[8918]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Mar 09 16:01:24 odroidxu4 nginx[8918]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Mar 09 16:01:24 odroidxu4 nginx[8918]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Mar 09 16:01:25 odroidxu4 nginx[8918]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
Mar 09 16:01:25 odroidxu4 nginx[8918]: nginx: [emerg] still could not bind()
Mar 09 16:01:25 odroidxu4 systemd[1]: nginx.service: control process exited, code=exited status=1
Mar 09 16:01:25 odroidxu4 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
Mar 09 16:01:25 odroidxu4 systemd[1]: Unit nginx.service entered failed state.
Hint: Some lines were ellipsized, use -l to show in full.

실행에 실패한 것을 알 수 있어요. Address already in use라고 하는데, 0.0.0.0:80 인 말은 곧 80번 포트를 다른 프로세스가 잡고있단 말이에요.

하지만 포트 검색 시 아무 프로세스가 잡히지 않습니다.

lsof -i :80
netstat -antp | grep 80
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      2623/python2.7  
tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      2423/seaf-server
tcp        0      0 192.168.100.61:22       192.168.100.2:57806     ESTABLISHED 3631/sshd: odroid [
tcp6       0      0 192.168.100.61:80       192.168.100.2:41624     TIME_WAIT   -               
tcp6       0      0 192.168.100.61:80       192.168.100.2:41622     TIME_WAIT   -               
tcp6       0      0 192.168.100.61:80       192.168.100.2:40722     TIME_WAIT   -  

80번 포트면서 LISTEN인 상태가 있어야 누군가 잡고 있단 겁니다. 근데 아무 것도 없어요. 이상하네요.

cat /etc/nginx/sites-enabled/zzz-omv-nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    index index.html;
    access_log /var/log/nginx/443a8dec-163c-44c1-8490-ebc542be292f-access.log;
    error_log  /var/log/nginx/443a8dec-163c-44c1-8490-ebc542be292f-error.log;
    large_client_header_buffers 4 8k;
}

이 코드가 Nginx 실행 서버 목록에 포함되는 순간 망가지는 겁니다. 즉, 저 파일을 지우면 다시 웹 GUI에 접속하실 수 있어요.

rm /etc/nginx/sites-enabled/zzz-omv-nginx
service nginx restart

그리고 다시 접속해보면 접속이 됩니다.

이런 화면이 나올 거예요. 적용하겠냔 말인데, 이 때 Revert 를 눌러줍니다.

다시 사용하실 수 있으실 거예요.

지금은 일단 OMV4가 나오거나 패치되기 전까진 DDNS를 제대로 사용할 수 없는 걸로 보입니다. OMV 개발자들도 해당 문제를 알고 있는 것 같구요. 만약 서버 추가할 때 고장났다면, 이 해결 방법을 통해 임시로 해결한 뒤 포트포워딩으로 사용해주세요.

너무 늦은 피드백 죄송합니다 :)

추가) OMV 관리자 사이트의 포트를 80이 아닌 다른 걸로 바꾸면 Nginx 서버 추가가 문제 없이 되네요 :)


참고

반응형