TRUENAS 의 Jail 에 Reverse Proxy 용 NginX 설치하기

여러가지 서비스를 하나의 NAS 에서 운영하면 접속 방법의 관리가 귀찮아진다. 보통은 포트포워딩을 이용해서 관리하는데, 웹 서비스의 개수가 늘어나고 SSL 설정까지 하면, 포트포워딩으로는 여러가지 귀찮은 일이 생긴다. 하지만, 리버스 프록시 서버를 설정해서 80번과 443번 포트를 열어두면, 간단하게 서버네임 – 서브도메인, 도메인 – 을 이용해서 각 서비스로 연결 할 수 있다.

검색해보니 리버스 프록시로 아파치보다 NginX 를 좀 더 많이 사용하는 것 같다. 검색 결과에 NginX 를 사용한 것이 훨씬 더 많다. 그러니 나도…

작업 순서는

  1. Jail 생성
  2. NginX 설치
  3. NginX 설정

Jail 생성

그냥 만들면 된다. Base 와 Clone 의 차이는 있지만, 어차피 다 된다. NAT로 하면 일이 매우 어려워진다. 필히 공유기의 DHCP 를 활용하자.

NginX 설치

sh> pkg update
sh> pkg install nginx

NginX 설정

sh> cd /usr/local/etc/nginx
sh> mkdir domains (이름은 맘대로)

nginx 폴더 안에 설정 파일을 저장할 곳을 만든다. 이름은 적당히 정한다. 나는 도메인 별로 구분했기 때문에 저렇게 이름을 지었다.

sh> ee nginx.conf

NginX 설정 파일을 에디터로 연다. 참고로 ee 는 유니코드를 지원하지 않기 때문에, 영어 말고는 적으면 안된다. 주석도 예외가 아니다. 꼭 안되는 것은 아닌데, utf8 이 아니라고 땡깡부리는 놈 – Certbot – 들이 있다.

...

http {
    include       mime.types;
    default_type  application/octet-stream;

    include domains/*;
....

include 구문에 위에서 생성한 폴더를 넣는다.

저장하고 다음으로…

sh> cd domains
sh> ee 100_site_default.conf

기본 설정 파일을 설정한다. 그냥 IP 로 접속하거나, 등록되지 않은 도메인으로 접속하면 이 설정이 적용된다.

server
{
        listen 80 default;
        server_name _;

        location /
        {
                root /usr/local/www/nginx;
                index index.html;
        }
}

여기까지가 리버스 프록시 서버의 기본 설정이다. 확인을 위해 서버를 재시작한다.

sh> service nginx restart 

리버스 프록시 서버의 내부 IP 로 접속하면 index.html 파일이 보여야 정상이다. 80번 포트에 대한 포트포워딩 설정까지 되어 있다면 외부 IP 나, 미리 설정한 도메인들로 접속해서 확인할 수 있다.

sh> ee 101_site_blog.conf

이제 본론이다. 아래 내용을 붙여 넣고, Server_name 에 Domain 을, Proxy_pass 에 연결할 Jail 의 IP 를 넣어 준다.

server
{
    server_name blog.example.com;
    listen 80;

    client_max_body_size 256M;
    
    location /
    {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;

	# My Server
	proxy_pass http://192.168.0.128;
    }
}

여기까지 했으면, 다음부터는 반복 작업이다. 위 파일만 복사해서 server_name 에 사용 할 도메인, proxy_pass 에 연결할 IP 를 넣어주면 된다. 192.168.0.128:8080; 도 되고, 192.168.0.128/wordpress/; 같은 식도 된다.

중간의 client_max_body 옵션은 최대 파일 전송 용량이다. 해당 서버에서 아무리 설정을 건드려도 ( 특히 php.ini 같은 거…) 여기서 안 늘려주면 다 소용 없다.

설정 파일을 저장하고 nginx 를 재시작 하면, 도메인으로 각 서비스에 접속할 수 있게 된다. 여기서 만족해도 되지만, SSL 을 쓸 거면 삽질을 좀 더 해야 한다.

답글 남기기

이메일 주소는 공개되지 않습니다.