NGINX 사용자별 가상호스트 도메인 기본 설정 방법

NGINX
튜토리얼 환경 : 우분투 16.04 LTS Xenial / NGINX 패키지 설치

하나의 IP로 웹서버에서 여러 도메인을 연결해서 서비스를 하기 위해서는 가상호스트(VirtualHost)를 설정해야 합니다.

NGINX 역시 가상호스트를 지원하는데 http 블럭 안에 server 블럭을 만들고 location 으로 각 세부적인 설정을 할수 있습니다.

또한 NGINX에서 워드프레스, Xpress Engine, 그누보드등을 구동하기 위한 PHP를 사용하기 위해서는 FastCGI 방식으로 연결되는데 PHP 설정 역시 가상호스트에서 할 수 있습니다.

기본적으로 설정이 모여 있는 nginx.conf 파일을 열어 하단에 이어 가상호스트 설정을 추가해도 되지만 가상호스트 설정이 많을 경우 파일 하나에 설정을 담는 것은 가독성도 떨어지고, 자동화시 구문을 구별하는데 비효율적이기 때문에 가상호스트별 설정을 별도의 파일로 관리하는 것이 좋습니다.

http {
        include /etc/nginx/sites-enabled/*;
}

nginx.conf파일 안에 위와 같은 구문이 있어 가상호스트 설정 파일이 위치한 /etc/nginx/sites-available에서 심볼릭 링크를 위 디렉토리로 걸어 사용하는 가상호스트와 사용하지 않는 가상호스트를 관리할 수 있습니다. 혹시라도 위의 구문이 없다면 추가합니다.

가상호스트 루트 디렉토리 생성과 퍼미션

# mkdir /home/계정명/www
# chown -R www-data:www-data /home/계정명/www
# usermod -G www-data 계정명

일반적으로 호스팅시 가상호스트의 루트(root) 디렉토리 구조는 사용자 디렉토리 하위에 www 또는 public_html입니다. 웹문서가 게시될 곳과 로그 파일이 위치할 디렉토리를 위 명령어를 통해 생성합니다.

우리가 홈페이지를 제작하고 구성할때, 워드프레스나 Xpress Engine 같은 CMS 프로그램을 이용하게 되는데 이때 PHP 프로그램에서 자동으로 생성하는 설정이나 캐시같은 파일들은 웹서버에서 생산하는 파일로 NIGNX가 구동하는 계정 권한인 www-data로 생성 및 실행, 삭제됩니다.

이때 디렉토리의 권한이 없다면 당연히 작동에 문제가 생기기 때문에 가상호스트 루트 디렉토리의 권한을 변경하고 사용자가 FTP나 SSH를 이용해서 파일을 컨트롤 할때 파일의 권한 문제가 생길수 있기 때문에 웹서버에서 사용할 계정을 www-data 그룹에 추가해 문제가 없게 합니다.

가상호스트 추가

server {
        listen 80;
        root /home/계정명/www;
        server_name domain.com www.domain.com;
        index index.html index.htm index.php;
        access_log /var/log/nginx/$host-access.log main;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

/etc/nginx/sites-available/ 디렉토리 안에 위와 같이 가상호스트가 적용될 도메인 주소와 루트 디렉토리, 로그, PHP 구동 설정이 담긴 설정 파일을 만든 다음 저장합니다.

ln -s /etc/nginx/sites-available/가상호스트파일명 /etc/nginx/sites-enabled/가상호스트파일명

그리고 위와 같이 설정 파일을 sites-enabled 디렉토리에 심볼릭 링크를 걸어 NGINX에서 해당 설정을 사용할수 있게 한 다음 NGINX를 재시작 합니다.

IP 및 기타 도메인 접근 불가 설정

server {
        listen 80 default_server;
        listen 443 default_server;
        server_name _;
        return 403;
}

NGINX의 기본 가상호스트 설정 파일인 default를 사용할 경우 별도의 가상호스트에 도메인을 명시하지 않았다면 server_name _; 구문으로 인해 웹서버 IP에 연결되어 있는 모든 도메인 및 IP로 접근하는 메인 페이지가 되어버립니다.

만일 DNS에서는 연결이 되어 있으나 가상호스트로 명시하지 않은 도메인은 접근하지 않게 설정하고 싶은 경우 위와 같이 default 설정 파일을 수정합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Fill out this field
Fill out this field
유효한 이메일 주소를 입력해주세요.