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

2020-05-12

개요


개인적으로 생각하는 우분투의 장점중 하나는 웹 서버의 가상 호스트를 체계적으로 관리할 수 있다는 점입니다.


가상 호스트를 단일 파일로 관리하는 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/*;
}

nginx 와 php-fpm 로 서비스중에 새로운 가상호스트를 RHEL 이나 CentOS 를 주로 사용하지만 가상호스트 설정 방식은 sites-available과 sites-enabled/ 에 넣어서 관리하는 우분투 방식이 마음에 듭니다.

RHEL 에서도 위와 같은 방식으로 사용할 수 있도록 laravel 의 homestead 에 있는 serve.sh 를 참고해서 만들어 보았습니다.

serve-php.sh domain document_root 형식으로 사용하시면 됩니다.


사용


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


같이 보기


RHEL/CentOS 와 Amazon Linux 에 php 7 설치

Ubuntu/RHEL/CentOS 에 PHP 컴파일해서 설치하기(Compiling PHP from Source)

Amazon Linux AMI에 PHP 7.3 설치

https://gist.github.com/lesstif/82c107282241c7a52ad9


이 글은 정광섭님의 홈페이지에서도 보실 수 있습니다. 원문 링크 https://www.lesstif.com/php-and-laravel/nginx-+-php-fpm-virtual-host-87949612.html


1일 1식 라라벨 139호

2020년 5월 12일


정광섭

쉽게 배우는 라라벨 5 프로그래밍 저자. 20년 경력의 야크 털깍이 전문가.