가상 호스트 Virtual Host(server block) 생성하기
nginx.conf에서 server_name와 listen, root를 좀 손봐주면 한 기기에서도 여러 웹 페이지를 서비스할 수 있습니다.
Document root 경로
/etc/nginx/sites-available/default를 확인해보면 server block의 root가 /var/www/html인 것을 확인할 수 있다. 해당 경로로 이동한 후 index.html을 수정하면 수정사항이 반영되는 것을 확인할 수 있다.
여기에 React로 빌드한 결과물을 넣어주거나, 단순히 html로 작성한 내용물을 넣어주면 nginx가 렌더해준다. 이 곳이 nginx가 렌더하는 기본적인 웹 사이트 소스의 경로입니다.
Virtual Host가 뭐야
virtual host는 apache 에서 주로 사용하는 용어로, nginx에서는 server block이라는 용어가 더 적합합니다만 구분없이 사용하고 있습니다. 어쨌든 뜻하는 바는 '한 서버에서 여러 개의 웹을 돌릴 수 있다'(multiple websites on a single server)는 것입니다.
우선 기본적으로 nginx는 앞서 살펴본 document root인 /var/www/html를 렌더링하는 기본 웹 서버를 가동하고 있습니다. 여기와 별개로 또 다른 웹을 구성할 수 있다는 것입니다.
1. Creating a new site
우선 렌더할 html을 만들어봅시다. mkdir /var/www/[원하는 이름] 으로 만들겠습니다.
root의 처음 설정이 /var/www/html로 되어 있으니 아래와 같이 가지런히 만들어줍시다.
만약 한 웹 서버에 많은 웹을 호스팅하고 싶다면 파일 이름을 아무렇게나 지을 것이 아니라
/var/www/test1.com
/var/www/test2.com
과 같이 가지런히 어떤 도메인에 속한 웹인지 확실하게 명시하는 것이 좋습니다.
만든 후에는 nginx가 접근할 수도 있도록 해당 디렉토리의 permission을 chmod -R 755 로 변경하는 것을 잊지 맙시다.
// 디렉토리 생성 및 이동
mkdir /var/www/virtual
cd /var/www/virtual
// html 파일 생성
touch virtualtest.html
vim virtualtest.html
// 755로 권한 주기
chmod -R 755 /var/www/virtual
2. Configuring your Nginx virtual hosts
이제 nginx.conf를 수정하여 server block을 만들어 봅시다. 그 전에 서비스할 Virtual host에 대한 설정을 만들어줘야 합니다.
/etc/nginx/sites-available에 들어가면 기본으로 nginx가 서비스하는 호스트에 대한 설정을 담고 있는 default가 있습니다. default 내부에 또 다른 server block을 만들 수도 있고 다른 파일을 하나 더 만들어서 server block을 만들 수도 있습니다. 저는 그냥 default를 수정해보도록 하겠습니다.
포트는 3000번으로 (80번은 이미 nginx default 호스트 서버 블락이 사용중입니다)
root에는 우리가 만든 정적 파일들이 존재하는 곳으로 연결시켜 놓고
server_name에는 우리가 사용할 도메인 주소를 적어놓고
index에는 그 곳에서 기본적으로 렌더할 파일을 지정합니다. 우리가 생성한 virtualtest.html로 지정해보겠습니다.
이제 sites-enabled에 심볼릭 링크를 만들어줘야 합니다. 이미 sites-enabled에는 default가 심볼릭 링크로 지정이 되어 있어서 우리는 따로 무언가를 해 줄 필요는 없습니다.
만약 다른 파일을 만들어 virtaul host server block을 만들었다면 다음과 같이 심볼릭 링크를 만들어 줍시다.
ln -s /etc/nginx/sites-available/만든 파일 /etc/nginx/sites-enabled/만든 파일
sites-available에 호스팅 관련 설정을 마쳤고 sites-enabled에 심볼릭 링크도 만들었다면 모든 일이 끝났습니다. nginx를 재시작하고 테스트합시다.
service nginx restart
nginx를 설치한 곳의 3000 포트로 접속해보면 이제 접속이 됩니다~!
sites-enabled과 sites-available의 차이는 무엇인가
https://forteleaf.tistory.com/entry/nginx-site-enabled-site-availablemd
https://twpower.github.io/50-make-nginx-virtual-servers
apache에서도 위와 같은 이름의 파일이 존재하는데 같은 관계이다.
sites-available은 서버에서 운영할 사이트의 설정 파일이며
sites-enabled은 sites-available에 설정한 파일을 심볼릭 링크로 추가하여 실제 운영에 사용할 설정파일들이다.
참고한 글)
https://www.keycdn.com/support/nginx-virtual-host#:~:text=%23,websites%20on%20a%20single%20server.