nginx + php-fpm 환경에서 가상 호스트(Virtual Host) 쉽게 구성하기
개요
개인적으로 생각하는 우분투의 장점중 하나는 웹 서버의 가상 호스트를 체계적으로 관리할 수 있다는 점입니다.
가상 호스트를 단일 파일로 관리하는 RHEL이나 CentOS 와는 달리 우분투는 /etc/nginx/sites-available 폴더에 가상 호스트 설정을 넣어주고 /etc/nginx/sites-enabled 폴더에는 활성화할 가상 호스트를 symbolic link 해서 사용하고 있습니다.
즉 새로 blog.example.com 이라는 가상 호스트를 추가하려면 /etc/nginx/sites-available/blog.example.com 파일에 가상 호스트 설정을 하고 다음 명령어로 symbolic link 를 해준 후에 웹 서버를 재구동해 주면 됩니다
ln -s /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled
RHE/CentOS에 비해서 체계적으로 가상 호스트를 관리할수 있는 장점이 있지만 가상 호스트 파일을 직접 만들어 줘야 하는 번거로움이 있어서 지금 소개하는 스크립트를 작성하게 되었습니다.
이 스크립트는 laravel homestead 의 laravel.sh 를 참고해서 작성했습니다.
serve-php 스크립트
serve-php.sh 는 github 에 gist 로 공개한 간단한 가상 호스트 생성 스크립트로 다음 역할을 수행합니다.
- RHEL/CentOS 에서 Ubuntu 방식으로 가상 호스트를 관리할 수 있게 해줌
- PHP 로 개발한 서비스의 가상 호스트에 필요한 기본 설정을 제공
스크립트는 gist 에 있으므로 git clone 하거나 다음 명령어로 다운받아서 사용하면 됩니다.
git clone https://gist.github.com/82c107282241c7a52ad9.git serve-php
curl -o serve-php.sh https://gist.githubusercontent.com/lesstif/82c107282241c7a52ad9/raw sudo mv serve-php.sh /usr/local/bin/ sudo chmod +x /usr/local/bin/serve-php.sh
이제 RHEL/CentOS 계열은 /etc/nginx/nginx.conf 의 http 블록에 다음 내용을 추가해 줍니다.
http { ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; ## 추가 부분 include /etc/nginx/sites-enabled/*; }
사용
PHP 로 개발한 서비스를 새로 가상 호스트로 추가하려면 다음 명령어를 실행합니다.
sudo serve-php.sh domain path
domain 에는 서비스의 도메인을 적어주고 path 는 PHP 서비스의 web root 를 주면 됩니다.
주의할 점은 laravel 로 개발한 소스의 경우 소스의 root 가 아니라 public 폴더를 적어줘야 합니다.
예로 라라벨로 개발한 서비스의 도메인이 blog.example.com 이고 web root 가 /var/www/blog.example.com 폴더일 경우(이 폴더 바로 아래에 artisan 명령어가 있어야 합니다.) 다음과 같이 웹 서버 루트를 지정하면 됩니다.
sudo serve-php.sh blog.example.com /var/www/blog.example.com/public
성공적으로 추가되었으면 /etc/nginx/sites-available/blog.example.com 와 /etc/nginx/sites-enabled/blog.example.com 파일이 생기고 nginx 와 php-fpm 을 재시작하므로 브라우저에서 바로 가상 호스트로 연결할 수 있습니다.
$ ls -l /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled/blog.example.com -rw-r--r-- 1 root root 2431 May 5 11:41 /etc/nginx/sites-available/blog.example.com lrwxrwxrwx 1 root root 44 May 5 11:41 /etc/nginx/sites-enabled/blog.example.com -> /etc/nginx/sites-available//blog.example.com
마치며
가상호스트를 추가하는 작업은 자주 발생하므로 스크립트를 이용한 자동화가 필요합니다.
소개한 스크립트를 활용하면 가상 호스트 추가에 필요한 nginx 설정 파일을 자동 생성해 주며 RHEL/CentOS 에서도 우분투 방식의 가상 호스트 관리를 사용할 수 있는 장점이 있으므로 잘 활용하시기 바랍니다.