이 가이드는 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의 "로그인 포털" 또는 "응용 프로그램 포털"에서 역방향 프록시 규칙을 추가합니다.
- 시놀로지 NAS 제어판 > 로그인 포털 > 고급 탭으로 이동합니다.
- 역방향 프록시 규칙을 클릭하고 생성 버튼을 누릅니다.
- 설정 예시:
- 일반:
- 규칙 이름: 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 레코드를 설정합니다.
- Cloudflare 대시보드에 로그인하여 해당 도메인을 선택합니다.
- DNS 탭으로 이동합니다.
- 레코드 추가를 클릭하여 A 레코드를 추가합니다.
- 유형: A
- 이름: www (또는 www.aaa.kr 전체)
- IPv4 주소: 시놀로지 NAS의 외부 공인 IP 주소
- 프록시 상태: **프록시됨 (주황색 구름)**으로 설정합니다. (Cloudflare의 CDN 및 SSL/TLS 보호 기능을 사용하기 위함)
- 저장을 클릭합니다.
주의사항: 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 설정은 변경할 필요가 없어 유연한 웹 서비스 운영이 가능합니다.
'IT 관련 > 우분투(Ubuntu) 이것저것' 카테고리의 다른 글
| Ubuntu 24.04 LTS에 Cockpit 및 Navigator 설치 (0) | 2025.06.18 |
|---|---|
| docker 설치 n8n 업데이트 설치 (0) | 2025.06.12 |
| Ubuntu 24.04 웹 기반 서버 모니터링 (1) | 2025.06.06 |
| Ubuntu 서버(N100)에 Docker 설치방법 (0) | 2025.06.06 |
| Ubuntu 로그 확인 journalctl 이란? (0) | 2025.05.30 |