가상 호스트 설정
1. 가상 호스트란 무엇인가?
상상해봐, 너가 아늑한 카페를 열었다고 생각해봐. 대부분의 손님들은 커피 ☕를 마시러 오지만, 가끔 누군가는 차 🍵를 주문해. 차 애호가를 위해 별도의 가게를 열기보단, 그냥 작은 코너를 만들어서 차를 좋아하는 손님들을 맞이한다고 생각해봐. 웹 서버의 세계에서는 이 개념을 가상 호스트라고 불러. 가상 호스트는 너의 서버가 여러 사이트(각각 다른 도메인)를 처리할 수 있게 해주면서, 물리적 서버는 하나로 유지되도록 해주는 거야.
가상 호스트의 종류
- IP 주소 기반 — 각 사이트가 고유한 IP 주소를 갖게 된다. 이건 마치 콘서트의 VIP 존과 같아: VIP 티켓을 가진 각 고객은 자신만의 자리를 갖게 돼.
- 도메인 이름 기반 — 여러 사이트가 하나의 IP 주소를 공유할 수 있어. 여기서 서버는 클라이언트 요청에서 호스트 이름(도메인 이름)을 사용해서 어떤 사이트를 보여줘야 하는지 이해해. 이 방식은 대부분의 프로젝트에 더 일반적이고 편리한 선택이야.
2. Nginx에서 가상 호스트 설정하기
1. 새 가상 호스트 생성하기
가상 호스트를 설정하려면 먼저 구성 파일을 만들어야 해. 이 파일은 특정 도메인에 대한 요청을 서버가 어떻게 처리해야 하는지에 대한 정보를 담고 있어.
우리 사이트 예시로 example.com
파일을 만들어 보자:
sudo nano /etc/nginx/sites-available/example.com
다음 구성 블록을 추가해:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
코드를 상세히 살펴보자:
listen 80;
: 서버가 80번 포트를 청취한다는 걸 나타냄 (기본적으로 HTTP에 사용돼).server_name example.com www.example.com;
: 서버가 반응해야 할 도메인 이름들.root /var/www/example.com;
: 사이트 파일이 저장된 루트 폴더를 지정.index index.html;
: 사이트의 "메인 페이지"로 사용할 파일을 지정.location / { try_files $uri $uri/ =404; }
: 요청 라우팅 설정. 파일이나 디렉토리를 찾을 수 없으면 404 오류 반환.
2. 설정 활성화
이제 가상 호스트를 "활성화"해야 해. Nginx에서는 심볼릭 링크를 통해 이 작업을 수행해:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
그 후 구성에 오류가 없는지 확인해:
sudo nginx -t
모든 게 정상이라면 서버를 재시작해:
sudo systemctl reload nginx
3. 작동 확인
사이트 파일 폴더를 생성해:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
다음 간단한 HTML 코드를 추가해:
<h1>Welcome to example.com!</h1>
<p>Your Nginx server is ready to serve.</p>
파일을 저장하고 브라우저에서 http://example.com
를 열어봐. 환영 메시지가 보인다면 가상 호스트가 잘 작동하고 있는 거야!
4.Linux에서의 심볼릭 링크
심볼릭 링크(혹은 soft links, symlinks)는 다른 파일이나 디렉토리를 가리키는 특별한 파일 객체야. Windows에서의 "바로가기"처럼 작동하며, 대체 경로를 통해 대상 파일이나 폴더에 접근할 수 있어.
심볼릭 링크는 원본 객체의 경로를 포함하고, 객체 자체를 포함하지 않아. 원본 파일이나 폴더가 이동되거나 삭제되면 링크는 "끊어진 링크"가 되고, 더 이상 존재하는 객체를 가리키지 않아.
심볼릭 링크를 생성하는 명령어:
ln -s target link_name
target
— 원본 객체의 경로.link_name
— 링크 이름.
예시:
ln -s /var/log/syslog log_link
이제 log_link
를 통해 /var/log/syslog
파일에 접근할 수 있어.
사용 사례:
- 탐색 단순화.
- 파일 접근의 대체 경로 생성.
- 디렉토리 조직화.
3. Apache에서 가상 호스트 설정하기
1. 설정 파일 생성
Apache는 다른 접근 방식을 사용해. 여기서 가상 호스트 설정은 /etc/apache2/sites-available/
디렉토리에 있어. 이제 우리 사이트를 위한 파일을 만들어보자:
sudo nano /etc/apache2/sites-available/example.com.conf
다음 코드를 추가해:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
간단한 설명:
<VirtualHost *:80>
: 80번 포트로 들어오는 모든 요청에 대해 이 설정이 적용됨을 나타냄.ServerName
와ServerAlias
: 주요 및 추가 도메인 이름을 지정.DocumentRoot
: 사이트의 루트 디렉토리를 지정.<Directory>
: 지정된 디렉토리에 대한 접근 권한과 동작을 정의하는 블록.
2. 설정 활성화
설정을 활성화하려면 다음 명령을 사용해:
sudo a2ensite example.com.conf
변경 사항을 적용하려면 서버를 재시작해:
sudo systemctl restart apache2
3. 작동 확인
다시 말하면, 사이트를 위한 디렉토리와 파일을 생성해야 해:
sudo mkdir -p /var/www/example.com
sudo nano /var/www/example.com/index.html
내용을 추가해봐:
<h1>Apache에서 example.com에 오신 걸 환영합니다!</h1>
저장하고 브라우저에서 열어봐: http://example.com
. 환영 화면이 보이면 축하해, Apache에서 가상 호스트를 성공적으로 설정했어!
4. 여러 호스트 점검 및 관리
두 번째 가상 호스트 설정
예를 들어, 두 번째 사이트 test.com
을 서비스하고 싶다고 치자. 이 과정은 다음과 같아:
- 새로운 설정 파일을 만듭니다.
- 고유한 도메인 이름과 루트 폴더를 지정합니다.
- 설정을 활성화하고 서버를 재시작합니다.
Nginx의 경우:
sudo nano /etc/nginx/sites-available/test.com
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/
sudo systemctl reload nginx
Apache의 경우:
sudo nano /etc/apache2/sites-available/test.com.conf
sudo a2ensite test.com.conf
sudo systemctl restart apache2
문제 디버깅
가상 호스트가 작동하지 않는 경우, 오류 로그를 확인하는 것으로 시작하세요. 예를 들어:
Nginx의 경우:
sudo tail -f /var/log/nginx/error.log
Apache의 경우:
sudo tail -f /var/log/apache2/error.log
사이트를 직접 테스트하려면 curl
명령을 사용할 수도 있습니다:
curl -I http://example.com
이제 가상 호스트를 설정하고 한 서버에서 여러 사이트를 실행할 수 있어. 이와 함께 HTTPS 설정도 진행해서 사이트를 안전하게 만들 수도 있지. 하지만 그건 다음 강의에서 다룰 거야!
GO TO FULL VERSION