NAS & ODROID/OMV 3 NAS

오드로이드 XU4 + OMV 로 자작 NAS 구축하기 - 도메인 적용하기

awesometic 2017. 7. 24. 17:21
반응형

도메인 적용은 옵션입니다. 꼭 해주시지 않아도 됩니다. 하지만 보안 등의 이유로 SSL을 원하신다면 SSL의 선행과정으로 꼭 하셔야 합니다.

도메인은 IP가 사람이 외우기 어렵기 때문에 탄생했습니다. 네이버도 naver.com 이 아니라 23.42.168.102 라면 매번 접속하는 게 굉장히 불편하겠죠. 그래서 도메인 관리 기관에 naver.com 은 23.42.168.102 라고 저장시켜 놓고 우린 숫자가 아닌 naver.com 을 입력하는 것 만으로도 네이버에 접속할 수 있게 된 겁니다.

우리가 사용하는 오드로이드 NAS도 똑같습니다. 이름이 없으니 집의 공인 IP를 외워서 사용해야 합니다. 가족끼리만 사용한다면 하나만 외우면 되니까, 한 번만 설정해두면 되니까 괜찮긴 합니다만 블로그 호스팅 등 사용자의 범위를 넓힌다면 도메인이 필요하게 됩니다.

또한 SSL을 적용하려면 도메인이 꼭 필요합니다. SSL 인증서를 발급할 때 도메인이 포함된 웹 사이트의 호스트 헤더를 기준으로 발급한다고 합니다. IP로는 발급할 수가 없어요.

도메인이 있다면 서브 도메인을 통해 각종 서비스에 쉽게 접근하실 수 있습니다. 만약 내 도메인이 example.com이고, OMV 관리자 페이지, Seafile, Wordpress을 서브 도메인을 통해 제공한다고 합시다. 그럼 omv.example.com, seafile.example.com, wordpress.example.com 등으로 접근할 수가 있어 IP를 외우지 않아도 돼 편리합니다.

도메인을 얻고, 적용해 보겠습니다.


* DDNS 를 적용하고 싶으신 분은 
2017/08/02 - [오드로이드 XU4/Misc] - NAS에 DDNS 적용하기 - DuckDNS
를 참고하세요!


* 도메인 관련 Nginx 설정에 문제가 있는 것 같으니 가이드를 다시 검토해보겠습니다. 해당 문서를 보시는 분들은 직접 적용하시진 말아주세요! - 누락/오탈자 수정 및 추가 설명 보충했습니다.

* Seafile 관련 문제가 있는 것 같습니다. 적용하지 말아주세요!

* 180309 현재 OMV3 + Nginx 플러그인 조합에 오류가 있습니다! 서버 추가 시 Nginx가 먹통이 되네요. 이 게시글을 참고해주세요: http://awesometic.tistory.com/121




1. 내도메인.한국 에서 도메인 얻기

* 테스트용이므로 바로 도메인을 해지했습니다.

무료로 도메인을 제공해주는 사이트는 많습니다만, 지금은 내도메인.한국이 가장 안정적이고 깔끔하게 무료로 도메인을 제공해주는 것 같습니다. 사이트에 접속해 가입하고, 위의 "도메인 등록" 메뉴를 클릭합니다.

그럼 위의 도메인 검색 화면이 뜹니다. 일반 도메인 검색에 awesometic-test 라고 타이핑해 검색해보니 아래의 도메인들을 등록할 수가 있네요. kro.kr 로 등록해보겠습니다. 마음에 드는 도메인 옆의 파란색 "등록하기" 글자를 누르면 보안코드를 입력하라고 합니다. 보안코드를 입력하면 바로 도메인 발급이 완료됩니다. 

도메인 발급이 완료되면 아래와 같은 설정 페이지가 뜹니다.

여러 가지 옵션이 있지만, 저희는 "고급설정 (DNS)" 에서 "IP연결(A)" 만 사용할 겁니다.

"IP연결(A)" 를 체크해주신 후, 원하는 서브 도메인 이름과 오드로이드 NAS의 외부 IP 주소를 입력합니다.

위 스크린샷과 같이 할 수 있겠죠. 완료되셨으면 보안코드 입력 후 아래 "수정하기" 버튼을 눌러 적용합니다.

이제 사용할 수 있는 서브 도메인 4개가 생겼습니다.

저희는 오드로이드 NAS의 Nginx 를 이용해 도메인 별로 다른 서비스를 제공하도록 할 겁니다. Nginx는 웹 서버, 즉 80번(+ SSL 445번) 포트만 이용하므로 이 작업이 잘 끝나면 FTP의 21, Seafile의 8000, 8082 포트와 Transmission의 9091 포트에 대한 포트포워딩 규칙을 삭제하셔도 됩니다.



2. Nginx에 적용하기

일단 서브 도메인을 사용하게 되면, 모든 접근이 서버의 웹 서버 프로그램으로 몰려야 이 웹 서버 프로그램이 각 서브 도메인 이름별로 나눠줍니다. 때문에 저희는 OMV에서 지원하는 Nginx로 다 몰고, Nginx에서 나눠줍시다.

OMV Nginx 메뉴로 가서, "서버" 탭으로 갑니다.

아무 것도 없을텐데, 위의 "추가" 버튼을 누르면,

이런 대화 상자가 나타납니다. 저희는 Nginx를 통해 Seafile과 Transmission을 제공할 겁니다. FTP 접속은 알아서 21번 포트로 보내주는 것 같습니다. Seafile과 Transmission 은 저희가 웹 사이트를 직접 구축해 연다던가, Wordpress처럼 웹 사이트 소스를 가져와 연다던가 하는 것이 아니기 때문에, 해당 도메인 이름으로 접속하는 정보를 다른 곳에 열려있는 Seafile과 Transmission 으로 넘겨줘야 합니다. Nginx를 프록시 서버로 사용하는 겁니다.

* 기본 서버 활성화는 하지 마세요.

1) Seafile 적용

OMV Nginx 서버 추가에서 호스트 유형을 이름-기반 으로 바꿔 Seafile로 접근하고자 하는 도메인을 입력합니다.

그리고 PHP, Index 항목들을 전부 비활성화하신 뒤 헤더 버퍼 크기를 32K로 맞춰줍시다.

마지막으로 추가 옵션에 아래 내용을 넣습니다.

proxy_set_header X-Forwarded-For $remote_addr;

location / {
    fastcgi_pass    127.0.0.1:8000;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   PATH_INFO          $fastcgi_script_name;

    fastcgi_param   SERVER_PROTOCOL    $server_protocol;
    fastcgi_param   QUERY_STRING       $query_string;
    fastcgi_param   REQUEST_METHOD     $request_method;
    fastcgi_param   ONTENT_TYPE        $content_type;
    fastcgi_param   CONTENT_LENGTH     $content_length;
    fastcgi_param   SERVER_ADDR        $server_addr;
    fastcgi_param   SERVER_PORT        $server_port;
    fastcgi_param   SERVER_NAME        $server_name;
    fastcgi_param   REMOTE_ADDR        $remote_addr;

    fastcgi_read_timeout 36000;
    client_max_body_size 0;
}

location /seafhttp {
    rewrite ^/seafhttp(.*)$ $1 break;
    proxy_pass http://127.0.0.1:8082;
    client_max_body_size 0;
    proxy_connect_timeout  36000s;
    proxy_read_timeout  36000s;
    proxy_send_timeout  36000s;
    send_timeout  36000s;
}

location /media {
    root /var/www/seafile/seafile-server-latest/seahub;
}

참고: https://manual.seafile.com/deploy/deploy_with_nginx.html

그리고 SSH 접속을 한 뒤, 아래 명령어를 차례대로 입력해 설정 파일 2개를 수정해줍시다.

아래 명령어에서 100.100.100.100은 포트포워딩된 자신의 외부 IP로, http://seafile.awesometic-tset.kro.kr 부분을 꼭 자신의 도메인에 맞게 수정한 뒤 입력해주세요! 두 줄의 명령어 모두 해당됩니다. 두 번째 줄의 /seafhttp는 지우지 말아주세요.

sed --in-place=.bak 's,http://100.100.100.100:8000,http://seafile.awesometic-test.kro.kr,g' /var/www/seafile/conf/ccnet.conf
echo "FILE_SERVER_ROOT = 'http://seafile.awesometic-test.kro.kr/seafhttp'" >> /var/www/seafile/conf/seahub_settings.py
echo "SERVE_STATIC = False" >> /var/www/seafile/conf/seahub_settings.py

추가로 자동 시작을 위해 등록했던 서비스를 살짝 고쳐줍니다. 다음 명령어를 입력하시면 됩니다.

sed --in-place=.bak '/ExecStart/,/start/s/start/start-fastcgi/' /etc/systemd/system/seahub.service
systemctl daemon-reload

* 웹 UI에서 URL을 설정하시면 SSH을 통해 설정한 사항들이 무시됩니다. 훗날 독이 되어 돌아올 것 같으니 Seafile 웹사이트의 설정 페이지에선 URL을 설정하지 마세요. 아마 알아서 바뀌어 있을 건데, 바뀌어있지 않을 경우에만 설정해주세요.


그리고 다시 SSH 접속했던 곳에서

service seafile restart && service seahub restart

위의 명령어를 통해 서비스를 재시작해주시면 됩니다.


2) Transmission 적용

Transmission에 적용하는 건 더 쉽습니다.

먼저, OMV Nginx 서버 추가에서 호스트 유형을 이름-기반 으로 한 뒤 Transmission에 접근하고자 하는 도메인을 입력합니다.

그리고 PHP, Index 항목들을 전부 비활성화하신 뒤 헤더 버퍼 크기를 32K로 맞춰줍시다.

마지막으로 추가 옵션에 아래 내용을 넣습니다.

location / {
    return 301 http://$server_name/transmission/;
}
      
location ^~ /transmission {
      
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass_header X-Transmission-Session-Id;

    location /transmission/rpc {
        proxy_pass http://127.0.0.1:9091;
    }
      
    location /transmission/web/ {
        proxy_pass http://127.0.0.1:9091;
    }
      
    location /transmission/upload {
        proxy_pass http://127.0.0.1:9091;
    }
      
    location /transmission/web/style/ {
        alias /usr/share/transmission/web/style/;
    }
      
    location /transmission/web/javascript/ {
        alias /usr/share/transmission/web/javascript/;
    }
      
    location /transmission/web/images/ {
       alias /usr/share/transmission/web/images/;
    }
      
    location /transmission/ {
       return 301 http://$server_name/transmission/web;
    }
}

참고: https://gist.github.com/Belphemur/47f76c40defef0269615


3. 테스트

Seafile과 Transmission에 각 도메인으로 접속해보세요.

그리고, 안드로이드 스마트폰에 설정된 Seafile과 Transmission도 포트포워딩 후 외부 IP로 수정했을 때처럼 주소를 도메인으로 바꾼 후 테스트해보세요.


4. 포트포워딩 해제

이제 80번 포트로 모든 접속이 몰리니 Seafile과 Transmission에 대한 포트포워딩 설정을 해제하셔도 좋습니다. :) 


* 도메인을 얻으셨으면 이제 SSL 인증서도 발급받아 더욱 안전하게 사용하실 수 있습니다. 다음 포스팅에서 진행됩니다.


반응형