🧐 🤔 컴퓨터 옆 메모장 🙄 😙

(Nginx) 가상호스팅

2024. 11. 9. Kim Evergood이가 씀

뭘 왜 하나

나 IP 주소 한 개밖에 없어요.
그치만 호스트는 여러 개 갖고 싶다구욧!

내 도메인은 example.com이고 playgroundcafe 호스트를 추가해볼 거예요~ ^^ 나 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 블록들을 각 파일로 분리하여 별도 디렉토리에서 관리한다. 인공지능 답변도 그게 관습이랬다. 그러나 참고용 예제는 언제나 필요한 최소한의 것이 있는 게 편하다. 파일 분리는 이 자료를 참고하는 사람이 알아서 할 몫이다.

참고

공식문서 - ngx_http_proxy_module

728x90

카테고리 다른 글