뭘 왜 하나
나 IP 주소 한 개밖에 없어요.
그치만 호스트는 여러 개 갖고 싶다구욧!
내 도메인은 example.com
이고 playground
와 cafe
호스트를 추가해볼 거예요~ ^^ 나 Nginx 알못인데 떠듬떠듬 알아봄.
각 호스트 실행
포트번호 8081, 8082로 각각 웹서버 실행.
~/ts/playground
, ~/ts/cafe
이렇게 두 디렉토리를 만들어서 각각 안에서 index.html
을 생성 후 간단히 파이썬 웹서버를 실행했다.
~/ts/playground
에서$ echo '<!DOCTYPE html><html><head><title>playground</title></head><body><h1>Lets do anything!</h1></body></html>' | sudo tee index.html $ nohup python3 -m http.server 8081 &
~/ts/cafe
에서$ echo '<!DOCTYPE html><html><head><title>cafe</title></head><body><h1>Welcome!</h1></body></html>' | sudo tee index.html $ nohup python3 -m http.server 8082 &
Nginx 설정
Nginx를 이용해 80 포트로 들어온 요청을 호스트 이름에 따라 각각 8081, 8082 포트로 넘겨주도록 설정한다.
Nginx 설치 후 설정 파일을 열어 편집한다. 설정파일의 경로는 환경과 설치방법에 따라 다를 수 있다.
sudo vi /etc/nginx/nginx.conf
각 호스트에 대응될 두 server
블록을 추가해준다.(http
블럭 안에)
server {
listen 80;
server_name playground.example.com; # 이 서버 블록을 특정 도메인 요청(cafe.example.com)에 매칭되도록 설정
location / {
proxy_pass http://localhost:8081; # 요청을 해당 주소로(playground 서버로) 넘긴다.
proxy_set_header Host $host; # 헤더 설정: 클라이언트가 요청한 호스트 이름($host)을 playground 서버로 전달한다.
proxy_set_header X-Real-IP $remote_addr; # 헤더 설정: 클라이언트의 IP 주소($remote_addr)를 playground 서버로 넘긴다. 이 설정이 없으면 playground 서버는 요청이 Nginx로 부터 온 것인 줄 알게 된다.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 헤더 설정: 프록시 서버를 거쳐 온 모든 IP 주소들의 리스트를 전달한다.
proxy_set_header X-Forwarded-Proto $scheme; # 헤더 설정: 클라이언트가 접속한 프로토콜(http 또는 https) 정보를 playground 서버로 전달한다.
}
}
server {
listen 80;
server_name cafe.example.com;
location / {
proxy_pass http://localhost:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
proxy_pass_request_headers
설정이 기본으로 on
이라서 proxy_set_header
가 필요없을 거 같은데?? 이거는 내가 실제로 해봐야겠음. 채찍피티가 또 구라를 쳤는가 보자고.
편집을 완료한 설정파일을 저장한 뒤
Nginx에서 설정파일을 새로 불러온다.
sudo nginx -s reload
DNS 설정
나는 이미 가비아에서 구입한 도메인이 있다.
나의 AWS EC2 인스턴스의 IP 주소를 두 호스트에 똑같이 넣는다.
DNS 설정이 적용되려면 좀 기다려야 한다고…. 이걸 하려고 마음먹었으면 그냥 이 DNS 설정 먼저 하는 게 나을지도.
확인
http://playground.arinmandri.xyz/
, http://cafe.arinmandri.xyz/
로 각각 접속하여 나의 index.html이 나오나 확인합니다.
잡솔
인터넷에서 여러 예제를 보았는데 대개 server 블록들을 각 파일로 분리하여 별도 디렉토리에서 관리한다. 인공지능 답변도 그게 관습이랬다. 그러나 참고용 예제는 언제나 필요한 최소한의 것이 있는 게 편하다. 파일 분리는 이 자료를 참고하는 사람이 알아서 할 몫이다.