웹서버구축 시 다중 도메인 설정 방법은?
_____A1. 하나의 서버(IP)에서 여러 개의 도메인을 호스팅하는 방식입니다. 이름 기반(name-based)과 IP 기반(IP-based) 방식이 있으며, 보통 이름 기반을 많이 사용합니다.
Q2. 다중 도메인 설정을 위한 사전 준비는 무엇인가요?
A2.
1. 도메인별 DNS A/AAAA 레코드가 서버 IP를 가리키도록 등록
2. 웹서버(Apache/Nginx 등) 설치 및 실행 확인
3. 서버 방화벽에서 HTTP(80), HTTPS(443) 포트 오픈
Q3. Apache에서 이름 기반 가상호스트 설정 방법은?
A3.
1. mod_name_virtual_host 활성화 (대부분 기본 활성화)
2. /etc/apache2/sites-available/에 도메인별 .conf 파일 생성
예) example.com.conf
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example
3. a2ensite example.com.conf
4. systemctl reload apache2
Q4. Nginx에서 다중 도메인 설정 방법은?
A4.
1. /etc/nginx/sites-available/에 서버 블록 파일 생성
예) example.com
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example;
index index.html index.php;
}
2. ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
3. nginx -t (구문 검사)
4. systemctl reload nginx
Q5. SSL(HTTPS) 적용 시 주의사항은?
A5.
1. SNI(Server Name Indication) 지원 필요 (대부분의 최신 서버/브라우저 지원)
2. 도메인별 인증서 발급 및 설정
- Let’s Encrypt: certbot 사용 예) certbot --nginx -d example.com -d www.example.com
3. 80포트에서 443포트로 강제 리디렉션 설정
Q6. IP 기반 가상호스트는 어떻게 설정하나요?
A6.
1. 서버에 여러 개의 공인 IP 할당
2. Apache
3. Nginx
server { listen 203.0.113.10:80; server_name a.com; … }
server { listen 203.0.113.11:80; server_name b.com; … }
Q7. 로컬 테스트를 위해 hosts 파일 수정은 어떻게 하나요?
A7.
1. 윈도우: C:\Windows\System32\drivers\etc\hosts
2. 리눅스/맥: /etc/hosts
3. 예)
192.0.2.123 example.com
192.0.2.123 test.com
4. 저장 후 브라우저 캐시 삭제 후 접속
Q8. 설정 후 도메인이 제대로 연결되지 않아요. 점검 방법은?
A8.
1. DNS 전파 여부(dig/nslookup 사용)
2. 웹서버 구문 오류(nginx -t, apachectl configtest)
3. 방화벽/보안그룹 설정 확인
4. SELinux/AppArmor 모드 확인
5. 로그 확인(/var/log/nginx/error.log, /var/log/apache2/error.log)
Q9. 리디렉션이나 리라이팅을 각 도메인별로 다르게 적용할 수 있나요?
A9.
1. Apache: VirtualHost 내에 RewriteRule, Redirect 사용
2. Nginx: server 블록 내에 return, rewrite 지시어 사용
3. 도메인별 HTTPS 강제, 특정 경로 리디렉트 등을 개별 설정 가능
Q10. 다중 도메인 운영 시 권장 사항은?
A10.
1. 도메인별 로그 분리(access/error)
2. 배포 자동화(Ansible, CI/CD) 적용
3. 보안 헤더(HSTS, CSP) 도메인별 설정
4. 모니터링(Audit, Uptime) 도메인 단위로 구성
첫째, 도메인마다 DNS 설정을 하고 둘째, 웹 서버(Apache나 Nginx)에 가상 호스트(또는 서버 블록)를 정의하며 셋째, SSL 인증서 발급·적용을 하고 마지막으로 방화벽·서비스 재시작을 통해 최종 검증을 합니다.
아래에 각 단계를 순서대로 자세히 설명합니다.
1. DNS 설정 1) 도메인 등록 기관(레지스트라) 또는 DNS 호스팅 서비스에서 A(또는 AAAA) 레코드를 추가합니다.
- 예시: “example.com”과 “example.net”이 같은 서버(IP 203.0.113.
10)로 접속되도록 A레코드 설정 · example.com → A → 203.0.113.10 · www.example.com → CNAME → example.com · example.net → A → 203.0.113.10
2) 변경 후 전파 시간이 길게는 몇 시간 걸릴 수 있으므로 `nslookup`이나 `dig` 명령으로 IP가 제대로 내려오는지 확인합니다.
2. 웹 서버 구성 대표적으로 Apache HTTPD, Nginx 두 가지 예를 들어 설명합니다.
가. Apache HTTPD에서의 가상 호스트 설정 1) /etc/apache2/sites-available(또는 /etc/httpd/conf.d/) 디렉터리에 도메인별 설정 파일을 만듭니다.
예를 들어 `/etc/apache2/sites-available/example.com.conf` 파일을 생성하고 아래처럼 작성합니다.
2) 사이트 활성화(우분투 계열 기준) sudo a2ensite example.com.conf sudo a2ensite example.net.conf
3) Apache 설정문법 확인 sudo apache2ctl configtest “Syntax OK” 메시지가 뜨면 문제 없는 것입니다.
4) 서비스 재시작 sudo systemctl reload apache2 (또는 `restart`) 나. Nginx에서의 서버 블록 설정 1) /etc/nginx/sites-available(또는 /etc/nginx/conf.d/)에 example.com.conf를 생성합니다.
server { listen 80; server_name example.com www.example.com; root /var/www/example.com/html; access_log /var/www/example.com/logs/access.log; error_log /var/www/example.com/logs/error.log; location / { try_files $uri $uri/ =404; } } example.net도 동일하게 또 다른 설정 파일을 만듭니다.
2) 우분투 계열에서는 심볼릭 링크로 활성화 sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/example.net.conf /etc/nginx/sites-enabled/
3) 문법 검사 및 재시작 sudo nginx -t sudo systemctl reload nginx
3. SSL 인증서 적용 HTTPS를 사용하려면 각 도메인별(또는 SAN 인증서로 묶어서) 인증서를 발급받아야 합니다.
1) Let’s Encrypt certbot 사용 예시 · 단일 인증서로 여러 도메인 처리: sudo certbot certonly --webroot -w /var/www/example.com/html \ -d example.com -d www.example.com -d example.net -d www.example.net · 인증서가 `/etc/letsencrypt/live/...` 디렉터리에 생성됩니다.
2) Apache 설정에 SSL 추가
3) HTTP → HTTPS 리다이렉트 · Apache: 첫 번째 VirtualHost(*:80)에서 RewriteRule 또는 Redirect 지시자 사용 · Nginx: `return 301 https://$host$request_uri;` 형태로 구현
4. 방화벽·SELinux 설정 1) 방화벽이 켜져 있으면 80, 443 포트를 허용합니다.
· ufw(우분투): `sudo ufw allow 'Nginx Full'` 또는 `sudo ufw allow 80,443/tcp` · firewalld(레드햇 계열): sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
2) SELinux가 Enforcing 상태라면 웹 루트 폴더에 적절한 컨텍스트를 부여합니다.
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com(/.*)?" sudo restorecon -R /var/www/example.com
5. 동작 확인 1) 브라우저에서 example.com, example.net에 접속하여 각각 의도한 사이트가 뜨는지 확인합니다.
2) HTTPS 접속 시 인증서 유효기간과 체인(chain)이 올바른지 검사 도구(SSL Labs 등)로 점검합니다.
이와 같은 절차를 따르면 하나의 서버에서 도메인별로 서로 다른 웹사이트를 독립적으로 운영할 수 있습니다.
운영 환경에 따라 PHP-FPM, 데이터베이스 연결 설정, 캐시·로깅 정책 등을 도메인별로 분리해 관리하면 더욱 안정적이고 효율적인 서비스 운영이 가능합니다.
작성자:
이시온 [비회원]
| 작성일자: 10개월 전
2025-07-22 08:02:24
조회수: 172 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 172 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.