2017-08-03

Synology NAS(DSM 6.1)에서 Nginx 사용자 설정값 유지하기

그 동안 본인은 Synology NAS에서 웹 스테이션으로 홈페이지를 운영할 때, DSM이 Apache와 mod_php에 대해서만 제대로 지원하고 있다고 생각했다. 실제로 Synology에서 운영하는 지식 기반 사이트에서도 .htaccess에 대한 언급은 있어도 Nginx의 설정파일(*.conf)에 대해서는 언급이 없었다. 그래서 Web Station을 제대로 활용하는 것은 거의 포기하고 있던 실정이었다.

기존의 방법들

본인은 개조없이 순수하게 Synology에서 제공해주는 기능만을 사용해야 한다고 생각하기에 아래와 같은 사이트에서 언급하고 있는 방법같은 것은 그 동안 전혀 시도하지 않았었다.

위의 글을 쓰신 분들도 아마 나처럼 이에 대해서 모르고 있었기에 저렇게 conf 파일을 지속적으로 뒤집어 씌우게 만들거나, site-enabled에 conf파일을 직접 넣어 쓰도록 만드신 것 같다. 나도 저 방법들을 고려하지 않은 것은 아니지만 저렇게 하면 각각 단점이 존재한다.

문제 1. Nginx의 설정값이 계속해서 변경된다.

Synology DSM자체가 Nginx의 설정값을 계속해서 원래 설정되어 있는 대로 수정시킨다. 이유는 모르겠으나 내용이 변경되어 있으면 수정하는 것 같다. 위의 블로그 글에 따르면 하루 중 0시에 매번 원래대로 바꾸는 것 같으나, 재부팅이나 DSM 업데이트, 백엔드 업데이트 등 다양한 상황 하에서 반드시 Nginx의 conf가 변경되지 않는다고 보장하기가 힘들다.

즉 Nginx의 conf 파일을 계속해서 다른 파일로 덮어 씌우는 것은 사용자의 설정값 변경이 100% 보장되는 방법이라고 보기 어렵다. 또한 시스템이 그렇게 건드린다는 것은 그렇게 되어야 할 필요가 있다는 말이기도 하다. 굳이 덮어씌우면서까지 할 필요는 없다고 생각한다. 혹시나 설정이 꼬이면 큰일나는 거니까.

문제 2. Synology에서 제공하는 SSL 보안 인증서를 사용하기 어렵다.

DSM 제어판의 보안 > 인증서에서 Let’s Encrypt 인증서를 발급받아 사용하면, 별 다른 설정 없이도 DSM이 3개월마다 알아서 자동으로 업데이트해준다. 추가로 도메인을 설정하는 것도 편하고, 굳이 SSH 콘솔 접속을 하지 않아도 클릭 몇번으로 가상호스트나 서비스에 ssl을 적용할 수 있는 점도 훌륭하다.

그런데 site-enabled에 사용자가 설정한 conf 파일을 넣어 사용하면, 사용자 설정값이 유지는 될 지언정 저런 편리한 DSM의 기능은 포기해야 한다. 인증서를 등록하더라도 수동으로 일일히 인증서 파일을 찾아서 conf 파일에서 수동으로 설정해줘야 하는 것이다. 한마디로 귀찮다.

위의 모든걸 해결할 수 있는 방법이 있다!

최근 Synology의 내부 웹 백엔드쪽 설정을 뜯어보면서, 유저 설정값을 유지할 수 있는 방법이 이미 제대로 마련되어 있음을 발견했다. 위와 같이 유저 설정값을 작업 스케쥴러까지 써가면서 덮어씌우지 않고도 Synology 자체에서 유저를 위해 설정값을 저장해둘 수 있는 것이다. 또한 기존의 SSL 인증서도 제어판에서 그대로 쉽게 구성하여 사용할 수 있다.

웹스테이션이 한번 크게 업데이트 된 DSM 6 이후로 아마도 이 방법이 계속 존재했을 것이다. 그러나 아직 DSM 5의 후반 버전을 사용하는 사람들도 있고, Apache의 쉬운 설정때문에 굳이 Nginx로 구성하지 않으려 하는 사람들도 있기에 아직 알려지지 않은게 아닌가 싶다. 본인도 이 방법을 알아내고 교차검증을 위해 구글을 전부 뒤져봤으나 Stackoverflow.com 쪽에서 딱 하나 관련된 질문답변글을 보았을 뿐이다.

아래의 내용은 DSM 6.1을 기준으로 작성되었다. 정확하게는 본인이 현재 사용하고 있는 DSM 6.1.3-15152 Update 1을 기준으로 작성되었다.

가상 호스트 설정

우선 Web Station 설정창에서 가상 호스트를 설정한다. Nginx 설정을 하던 하지 않던 어차피 가장 먼저 해야할 일이다. 무턱대고 먼저 SSH를 켤 필요가 없다. 우선 이것부터 잘 설정해 주자. 본 워드프레스 블로그는 아래와 같이 설정되어 있다.

Synology Web Station 가상 호스트 설정

HTTP 백엔드 서버는 Nginx를 선택하도록 하자. 그래야 Apache를 사용하지 않는다. PHP는 본인의 경우 PHP 7.0을 선택했는데, 5.6보다는 7.0이 낫다. 훨씬 가볍고 빠르기 때문에. 설정후 확인을 눌러주고 목록에 추가된 것을 확인한다.

SSH로 접속해 방금 생성된 가상호스트 설정 찾기

SSH로 DSM에 접속한다. 본인의 경우 콘솔 화면이 일반적인 경우와 조금 다를텐데, Tuwlab 블로그에서 제시한 Bash PS1 커스터마이징을 적용하였기 때문이다. 또한 SSH 접속을 위해 Xshell 5를 사용한다.

DSM에 SSH로 접속

접속을 확인하고 /etc/nginx/app.d로 이동하여 server.webstation-vhost.conf 파일을 연다. 해당 파일이 위에서 설정한 가상호스트 정보가 저장되는 파일이다.

Synology Web Station 가상호스트 설정 찾기

파일 내에 다음과 같이 설정된 부분을 찾는다.

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

    listen      443 ssl http2;
    listen      [::]:443 ssl http2;

    # 앞에서 설정한 도메인 이름
    server_name www.alphafactory.co.kr;

    (중략)

    # 기억해야 할 경로 이름
    include /usr/local/etc/nginx/conf.d/952ba38a-ef2a-4e87-b7ab-f055f5c64729/user.conf*;
}

저기서 952ba38a… 와 같은 숫자와 영문 조합의 이름을 잘 기억하자. 저 폴더 경로는 앞에서 가상호스트를 설정할때 알아서 자동으로 생성된다. 저 폴더 안에 파일명이 user.conf로 시작하는 Nginx 설정 파일을 집어넣으면 된다. 알아서 include되고, 저 폴더 안의 파일들은 DSM이 건드리지 않는다.

user.conf* 파일 작성하여 Nginx 설정

자동 생성되는 가상호스트 설정파일이 user.conf로 시작되는 이름을 가진 파일을 해당 경로에 넣으라고 하고 있다는 것은, 유저로 하여금 위의 방법을 이용해 Nginx를 커스텀하라는 Synology의 의도라고 봐도 될 것이다. 실제로 본인의 경우 이를 알게 된 후, 다음과 같이 user.conf 파일들을 만들어 본 워드프레스 블로그가 구동되도록 설정해놓았다.

본 워드프레스 사이트를 위한 Nginx 사용자 설정 파일들

user.conf* 파일 내에는 server { ... } 블록 내에서 사용될 수 있는 구문들만을 입력하여 사용하여야 한다. 즉 location { ... }과 같은 설정들을 작성하면 된다. 더 이상 Web Station에서 무거운 Apache를 사용할 이유가 없이, 순수하게 Nginx + php-fpm 조합으로 홈페이지를 구동할 수 있다. 본인도 현재는 Apache를 삭제하였다.

본인은 더이상 Apache를 사용하지 않는다.

SSL 인증서 적용도 문제없이

Web Station에서 UI를 통해 작성한 가상호스트 설정 파일은 일절 건드리지 않고, 그 설정 파일에서 제시한 user.conf* 파일만 추가해주었기 때문에 Web Station과의 충돌을 걱정할 필요도 없고, 또한 제어판 > 보안 > 인증서에서 SSL 인증서 설정도 아무 문제가 없다.

위의 방법대로 하면 SSL 설정에도 문제가 없다.

댓글 13

님께 답글 취소
댓글 등록 요청
스팸 댓글을 줄이기 위해 Akismet을 사용하고 있습니다.