IT 관련/우분투(Ubuntu) 이것저것

Ubuntu Nginx 웹 서버 구축: Cloudflare, 시놀로지 NAS 역방향 프록시를 이용한 HTTPS 다중 웹사이트 호스팅 가이드

islet2 2025. 6. 7. 23:23

 

 

  이 가이드는 Ubuntu 서버에 Nginx 웹 서버를 구축하고, Cloudflare를 통한 HTTPS 연결 및 시놀로지 NAS의 역방향 프록시를 활용하여 단일 도메인(www.aaa.kr)으로 여러 하위 경로(www.aaa.kr/a, www.aaa.kr/b 등)의 웹사이트를 호스팅하는 방법을 설명합니다. 특히 일반적인 웹 서비스 포트인 80번 포트(HTTP)를 기준으로 설정하며, 초보자도 쉽게 따라 할 수 있도록 단순 명료하게 구성했습니다. 

 

준비물

  • Ubuntu 서버 (버전 20.04 LTS 이상 권장)
  • 시놀로지 NAS (DSM 6.x 이상)
  • Cloudflare 계정 및 연결된 도메인 (www.aaa.kr 예시)

1. Ubuntu 서버 웹 폴더 구조 생성

Nginx가 서비스할 웹 페이지를 위한 폴더 구조를 만듭니다.

sudo mkdir -p /home/web/homepage
sudo mkdir -p /home/web/homepage/a
sudo mkdir -p /home/web/homepage/b
  • /home/web/homepage: 기본 웹사이트 루트 폴더
  • /home/web/homepage/a, /home/web/homepage/b: 하위 경로 웹사이트 폴더

각 폴더에 index.html 파일을 생성하고 간단한 내용을 추가하여 테스트 준비를 합니다. (예: /home/web/homepage/index.html, /home/web/homepage/a/index.html)

 

주의사항: 웹 파일은 Nginx 프로세스(www-data 사용자)가 읽을 수 있어야 합니다.


2. Nginx 설치 및 설정 (Ubuntu 서버)

Ubuntu 서버에 Nginx를 설치하고 웹 서비스 설정을 구성합니다.

 

Nginx 설치:

sudo apt update
sudo apt install nginx

 

 

기존 Nginx 기본 설정 제거 (필요시):

sudo unlink /etc/nginx/sites-enabled/default

 

Nginx Server Block 설정 파일 생성:

 

/etc/nginx/sites-available/www.aaa.kr 파일을 sudo nano 등으로 열고 다음 내용을 붙여넣습니다.

# /etc/nginx/sites-available/www.aaa.kr (작성일: 2025-06-07, Ubuntu Nginx 설정)
server {
    listen 80; # HTTP 기본 포트
    server_name www.aaa.kr; # 서비스할 도메인

    root /home/web/homepage; # 모든 요청의 기본 루트 디렉토리

    location / {
        # 요청된 URI가 디렉토리이면 index.html을, 아니면 파일을 찾음
        # 예: /a/ -> /home/web/homepage/a/index.html
        # 예: /a/style.css -> /home/web/homepage/a/style.css
        try_files $uri $uri/index.html $uri.html =404;
    }

    # 정적 파일 (CSS, JS, 이미지 등) 캐싱 설정 (권장)
    location ~* \.(css|js|gif|jpeg|jpg|png|svg|ico|webp)$ {
        expires 30d; # 30일 동안 캐시
        add_header Cache-Control "public, no-transform";
        # root 지시어는 server 블록에 정의되어 있으므로 여기서는 생략
    }

    # Nginx 로그 파일 경로
    error_log /var/log/nginx/www.aaa.kr_error.log;
    access_log /var/log/nginx/www.aaa.kr_access.log;
}

설명:

  • listen 80;: Nginx가 80번 포트에서 HTTP 요청을 수신합니다.
  • server_name www.aaa.kr;: 해당 도메인으로 들어오는 요청을 처리합니다.
  • root /home/web/homepage;: 모든 웹 파일의 기본 경로를 /home/web/homepage로 지정합니다.
  • location / { try_files ... }: 유연한 경로 처리를 통해 하위 폴더(예: /a, /b)에 대한 index.html 또는 기타 파일을 별도 설정 없이 자동으로 서비스할 수 있도록 합니다.
  • location ~* \.(css|js|...)$: 정적 파일의 캐싱을 설정하여 웹 성능을 향상합니다.

Nginx 설정 활성화 및 재시작:

sudo ln -s /etc/nginx/sites-available/www.aaa.kr /etc/nginx/sites-enabled/
sudo nginx -t # 설정 파일 문법 검사 (Syntax OK 확인)
sudo systemctl daemon-reload # systemd 데몬 재로드
sudo systemctl restart nginx # Nginx 서비스 재시작

3. Ubuntu 서버 권한 및 방화벽 설정

Nginx가 웹 파일을 읽을 수 있도록 권한을 설정하고, 방화벽을 통해 80번 포트를 엽니다.

웹 폴더 소유권 및 권한 설정: Nginx 워커 프로세스(www-data)가 /home/web/homepage 경로에 접근하고 파일을 읽을 수 있도록 권한을 부여합니다.

# 홈 디렉토리 경로에 대한 실행 권한 부여 (www-data 사용자가 통과할 수 있도록)
sudo chmod o+x /home/web

# 웹 루트 폴더 및 하위 모든 파일/폴더의 소유자를 www-data로 변경
sudo chown -R www-data:www-data /home/web/homepage

# 웹 폴더의 권한을 755 (읽기/쓰기/실행), 파일의 권한을 644 (읽기/쓰기)로 변경
sudo find /home/web/homepage -type d -exec chmod 755 {} \;
sudo find /home/web/homepage -type f -exec chmod 644 {} \;

 

주의사항: chmod o+x /home/web 명령은 /home/web 디렉토리의 '다른 사용자'에게 실행 권한을 주어 Nginx가 이 디렉토리를 통과하여 homepage 폴더로 접근할 수 있게 합니다. 이는 매우 중요합니다.

 

Ubuntu 방화벽 (UFW) 설정:

sudo ufw allow 80/tcp # HTTP (80 포트) 허용
sudo ufw allow 'Nginx HTTP' # Nginx HTTP 프로파일 활성화 (동일 효과)
sudo ufw enable # 방화벽 활성화 (이미 활성화되어 있다면 생략)
sudo ufw status # 방화벽 상태 확인

주의사항: UFW가 이미 활성화되어 있다면 80번 포트를 허용해야 합니다.


4. 시놀로지 NAS 역방향 프록시 설정

시놀로지 NAS의 "로그인 포털" 또는 "응용 프로그램 포털"에서 역방향 프록시 규칙을 추가합니다.

  1. 시놀로지 NAS 제어판 > 로그인 포털 > 고급 탭으로 이동합니다.
  2. 역방향 프록시 규칙을 클릭하고 생성 버튼을 누릅니다.
  3. 설정 예시:
    • 일반:
      • 규칙 이름: www.aaa.kr_Proxy (임의 지정)
      • 원본:
        • 프로토콜: HTTPS
        • 호스트 이름: www.aaa.kr
        • 포트: 443
      • 대상:
        • 프로토콜: HTTP
        • 호스트 이름: [Ubuntu 서버의 내부 IP 주소] (예: 192.168.0.13)
        • 포트: 80 (Ubuntu Nginx가 80번 포트에서 수신하므로)
    • 사용자 지정 헤더: 기본값 유지 (필요시 추가)
    • 확인을 클릭하여 저장합니다.

주의사항: 시놀로지 NAS에서 Ubuntu 서버의 80번 포트까지 내부 네트워크 연결이 원활한지 확인해야 합니다. (ping 테스트 등)


5. Cloudflare DNS 설정

Cloudflare 대시보드에서 도메인 www.aaa.kr에 대한 DNS 레코드를 설정합니다.

  1. Cloudflare 대시보드에 로그인하여 해당 도메인을 선택합니다.
  2. DNS 탭으로 이동합니다.
  3. 레코드 추가를 클릭하여 A 레코드를 추가합니다.
    • 유형: A
    • 이름: www (또는 www.aaa.kr 전체)
    • IPv4 주소: 시놀로지 NAS의 외부 공인 IP 주소
    • 프록시 상태: **프록시됨 (주황색 구름)**으로 설정합니다. (Cloudflare의 CDN 및 SSL/TLS 보호 기능을 사용하기 위함)
  4. 저장을 클릭합니다.

주의사항: DNS 변경 사항이 전 세계적으로 전파되는 데에는 시간이 걸릴 수 있습니다 (최대 몇 시간).


문제 해결 및 팁:

  • 504 Gateway Timeout 오류: 대부분 Nginx(Ubuntu) 또는 NAS 역방향 프록시 설정 오류, 혹은 Ubuntu 서버의 방화벽(UFW)에서 80번 포트를 열어주지 않아 발생합니다. Nginx 에러 로그(sudo tail -f /var/log/nginx/www.aaa.kr_error.log)를 확인하여 원인을 파악하세요.
  • 403 Forbidden 오류: Nginx가 웹 파일 또는 디렉토리에 접근할 권한이 없어서 발생합니다. chown 및 chmod 명령어를 사용하여 권한을 올바르게 설정했는지 확인하세요.
  • 브라우저 캐시: 설정 변경 후 웹 페이지가 제대로 표시되지 않을 경우, 브라우저 캐시를 지우거나 Ctrl + F5 (강제 새로고침)를 시도해보세요.
  • 내부 네트워크 테스트: 시놀로지 NAS의 SSH에서 Ubuntu 서버의 IP와 80번 포트로 telnet 테스트를 하여 내부 연결이 잘 되는지 확인하는 것이 유용합니다. (예: telnet 192.168.0.13 80)

이 가이드에 따라 설정을 진행하면, www.aaa.kr로 접속 시 /home/web/homepage의 index.html이, www.aaa.kr/a로 접속 시 /home/web/homepage/a의 index.html이 표시될 것입니다. 하위 폴더를 추가해도 Nginx 설정은 변경할 필요가 없어 유연한 웹 서비스 운영이 가능합니다.