/
nginx + php-fpm 환경에서 가상 호스트(Virtual Host) 쉽게 구성하기

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 로 공개한 간단한 가상 호스트 생성 스크립트로 다음 역할을 수행합니다.

  1. RHEL/CentOS 에서 Ubuntu 방식으로 가상 호스트를 관리할 수 있게 해줌
  2. PHP 로 개발한 서비스의 가상 호스트에 필요한 기본 설정을 제공


스크립트는 gist 에 있으므로 git clone 하거나 다음 명령어로 다운받아서 사용하면 됩니다.

git clone
git clone https://gist.github.com/82c107282241c7a52ad9.git serve-php
curl 로 다운로드
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 블록에 다음 내용을 추가해 줍니다.

/etc/nginx/nginx.conf
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 을 재시작하므로 브라우저에서 바로 가상 호스트로 연결할 수 있습니다.

nginx 가상 호스트 설정
$ 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 에서도 우분투 방식의 가상 호스트 관리를 사용할 수 있는 장점이 있으므로 잘 활용하시기 바랍니다.


같이 보기

Related content

엔진엑스 가상 호스트 설정(nginx Virtual Host Setup)
엔진엑스 가상 호스트 설정(nginx Virtual Host Setup)
More like this
가상 호스트(Virtual Host) 동작 방식
가상 호스트(Virtual Host) 동작 방식
More like this
가상 호스트(Vritual Host)와 SNI(Server Name Indication)
가상 호스트(Vritual Host)와 SNI(Server Name Indication)
More like this
nginx HTTP 로 들어오면 강제로 HTTPS 로 전환하도록 설정하기(force redirect to SSL)
nginx HTTP 로 들어오면 강제로 HTTPS 로 전환하도록 설정하기(force redirect to SSL)
More like this
nginx log를 rotate 해서 일자별로 관리(logrotate)
nginx log를 rotate 해서 일자별로 관리(logrotate)
More like this
nginx 로드 밸런싱 설정 (load balancing)
nginx 로드 밸런싱 설정 (load balancing)
More like this