Synology NAS(DSM 6.1)에서 Nginx 사용자 설정값 유지하기
그 동안 본인은 Synology NAS에서 웹 스테이션으로 홈페이지를 운영할 때, DSM이 Apache와 mod_php에 대해서만 제대로 지원하고 있다고 생각했다. 실제로 Synology에서 운영하는 지식 기반 사이트에서도 .htaccess에 대한 언급은 있어도 Nginx의 설정파일(*.conf)에 대해서는 언급이 없었다. 그래서 Web Station을 제대로 활용하는 것은 거의 포기하고 있던 실정이었다.
기존의 방법들
본인은 개조없이 순수하게 Synology에서 제공해주는 기능만을 사용해야 한다고 생각하기에 아래와 같은 사이트에서 언급하고 있는 방법같은 것은 그 동안 전혀 시도하지 않았었다.
- 시놀로지 NGINX에서 가상 호스트 및 유저 셋팅 보호
- 시놀로지 웹스테이션(nginx) 사용자 설정 파일 보호
- Synology DSM 6.1 Web Station Virtual Hosts and Logs settings
위의 글을 쓰신 분들도 아마 나처럼 이에 대해서 모르고 있었기에 저렇게 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를 켤 필요가 없다. 우선 이것부터 잘 설정해 주자. 본 워드프레스 블로그는 아래와 같이 설정되어 있다.
HTTP 백엔드 서버는 Nginx를 선택하도록 하자. 그래야 Apache를 사용하지 않는다. PHP는 본인의 경우 PHP 7.0을 선택했는데, 5.6보다는 7.0이 낫다. 훨씬 가볍고 빠르기 때문에. 설정후 확인을 눌러주고 목록에 추가된 것을 확인한다.
SSH로 접속해 방금 생성된 가상호스트 설정 찾기
SSH로 DSM에 접속한다. 본인의 경우 콘솔 화면이 일반적인 경우와 조금 다를텐데, Tuwlab 블로그에서 제시한 Bash PS1 커스터마이징을 적용하였기 때문이다. 또한 SSH 접속을 위해 Xshell 5를 사용한다.
접속을 확인하고 /etc/nginx/app.d
로 이동하여 server.webstation-vhost.conf
파일을 연다. 해당 파일이 위에서 설정한 가상호스트 정보가 저장되는 파일이다.
파일 내에 다음과 같이 설정된 부분을 찾는다.
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 파일들을 만들어 본 워드프레스 블로그가 구동되도록 설정해놓았다.
user.conf* 파일 내에는 server { ... }
블록 내에서 사용될 수 있는 구문들만을 입력하여 사용하여야 한다. 즉 location { ... }
과 같은 설정들을 작성하면 된다. 더 이상 Web Station에서 무거운 Apache를 사용할 이유가 없이, 순수하게 Nginx + php-fpm 조합으로 홈페이지를 구동할 수 있다. 본인도 현재는 Apache를 삭제하였다.
SSL 인증서 적용도 문제없이
Web Station에서 UI를 통해 작성한 가상호스트 설정 파일은 일절 건드리지 않고, 그 설정 파일에서 제시한 user.conf* 파일만 추가해주었기 때문에 Web Station과의 충돌을 걱정할 필요도 없고, 또한 제어판 > 보안 > 인증서에서 SSL 인증서 설정도 아무 문제가 없다.
댓글 13
덕분에 잘 적용 했습니다 감사합니다! :smiley:
저도 덕분에 많은 참조를 합니다. Nginx를 이렇게 사용할 수 있다는 것을 알려주셔서 감사합니다.
덕분에 많은 참조를 하네요 작업중 하나 질문사항이 있네요
iframe작업을 위해 add_header X-Frame-Options 을 추가하려는데 user.conf에 이문구만 삽입하는 게 맞는지요?
네 그렇게 하셔도 될것 같습니다. http 블록 안에서 include 되니까요
nginx에 룰루랄라 워드프레스 올려놓곤 htaccess 사용이 안되는걸 깨달아 좌절하던 차에 너무 큰 도움이 되었습니다. 감사합니다!
저 같은 경우에는 https://m.ygosu.com/board/yeobgi/1465235/?searcht=&search=&m3=real_article&frombest=Y&page=1 항목이 안보이네요 ㅜㅜ 그 위에는 똑같이 나오는데..이상하군요
복붙이안되네요; user.conf* 입니다. 헤놀 6.0 이구요
정확하게 어떤 상황인지 추측하기 어렵습니다. 어떤걸 말씀하시는지 조금 더 구체적으로 부탁드립니다.
또 다시 vim이라는 새로운 녀석을 만나야 되는군요…. 나름대로 열심히 공부해서 해보겠습니다. 상세한 답변 고맙습니다.^^
안녕하세요? 시놀로지 NAS를 사용하고 있는데… 막히는 부분이 있어서 관련글을 찾다가 여기까지 흘러왔습니다.
현재 php7 + nginx + mariaDB10 조합으로 XE 사용중이고, nginx rerite 사용이 불가능해 해결책을 찾아 3일 밤낮을 헤매고 다니고 있습니다.
많은 글을 보면서 여기 적힌 글이 가장 나은 해결책은 듯한데, SSH 사용도 거의 안 해봤고… 적힌대로 무작정 따라 해보다 도저히 안되어 실례를 무릅쓰고 도움을 요청해봅니다.
시간되시면 초보를 위해 조금 더 쉽게 풀이해 주실 수 있을까요?
→ ssh로 접속해서 cd 를 이용하니 들어가지네요… 여기까지가 제 능력입니다. ㅜ.ㅜ
→ 여는 것은 어떻게 하는가?
→ user.conf로 시작하는 Nginx 설정 파일을 집어넣는 방법을 모른다.
→ 이 부분은 전혀 이미지에 있는 내용대로 일일이 메모장에 작성해서 user.conf* 라고 저장하면 되는것인가? 저장 한 다음 어떻게 해야 하는 것인가?
vim이나 nano 등의 사용법을 알아보셔야 할 것 같습니다. 본 포스트의 작성 목적은 Nginx 설정값이 변경되지 않도록 하는 방법을 제시하는 것이지 SSH의 사용법이나 vim 등의 CLI 환경 텍스트 에디터를 사용하는 방법에 대해서는 따로 명기하지 않고 있습니다. 해당 내용에 대해서는 이미 다른 블로그들이 잘 알려주고 있기 때문입니다.
그래도 간단하게나마 다음과 같이 알려드리고자 합니다.
파일을 여는 방법
→app.d 폴더에서
sudo vim server.webstation-vhost.conf
커맨드를 입력하시면 됩니다.user.conf로 시작하는 Nginx 설정파일을 넣는 방법
→
sudo vim user.conf.wordpress
커맨드를 입력하여 vim으로 설정파일을 편집한 후 :wq 명령어로 저장후 끝내고 나온다.저장한 다음 어떻게 해야하는가?
→
sudo nginx -s reload
커맨드를 입력하여 변경된 Nginx 설정파일을 로드시킨다.댓글을 달아도 안남겨지는군요.
블로그 주소까지 남겨야 글이 등록이 되는군요. 장문의 댓글을 달았었는데 두번이나 날려먹었습니다^^. 댓글이 심사중인가 했습니다. 아무튼 저도 이 게시글을 보고, 나스에서 nginx기반 웹을 테스트하고있습니다. 윈도우에서만 nginx xe를 해왔거든요.
http://3jini.tistory.com/198
제 블로그 글 참고하시어 xe 의 rewrite 부분 해결해보시기 바랍니다. 윗부분은 패스하시고, 글 하단쪽에 rewrite에 대해 써 두었습니다.