본문으로 바로가기

아래의 내용은 웹호스팅을 위한 가상호스트 설정은 아닙니다. 그저 하나의 서버에 여러개의 웹서비스를 제공할 목적이며 웹호스팅을 위해서는 디렉토리 권한을 염두해 두어야 합니다.

가상호스트 구조

가상호스트를 위한 간단한 디렉토리 구조

웹루트 : /var/www/도메인명/public_html
웹로그 : /var/www/도메인명/logs
가상호스트 설정 : /usr/local/nginx/sites-enabled/도메인명.conf

가상호스트 디렉토리 생성

가상호스트 사용을 위한 웹루트 디렉토리들을 생성한다.

sudo mkdir -p /var/www/example.com/public_html
sudo mkdir /var/www/example.com/logs

생성한 디렉토리의 권한을 변경

sudo chown -R www-data:www-data /var/www/example.com/public_html

웹서비스의 관리자를 www-data 그룹에 추가하여 FTP 접속및 디렉토리및 파일을 수정/변경

sudo usermod -a -G www-data unclepapa

우분투 12.04 의 UMASK 값은 002 이기에 그룹에도 자동으로 7의 권한을 얻는다.

가상호스트로 사용할 설정파일 디렉토리 생성(아파치처럼 디렉토리 명을 명명했다).

sudo mkdir /usr/local/nginx/sites-enabled

가상호스트 예제

sites-enabled 디렉토리 이하에 도메인명으로 가상호스트 설정파일을 위치시킨다.

sudo vi /usr/local/nginx/sites-enalbe/exampl.com.conf

  server {
    listen       80; 
    server_name  www.example.com example.com;

    #charset koi8-r;
    access_log  /var/www/example.com/logs/access.log  main;
    error_log   /var/www/example.com/logs/error.log;

    location / { 
      root   /var/www/uzuro.com/public_html;
      index  index.html index.htm index.php;
    }   

    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }   

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #   
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}  

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #   
    location ~ \.php$ {
      #    root           html;
      #    fastcgi_pass   127.0.0.1:9000;
      fastcgi_pass   unix:/var/run/php5-fpm.sock;
      fastcgi_index  index.php;
      #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include        fastcgi_params;
    }   
  }   

NGINX 설정 변경

엔진엑스 설정파일을 아래와 같이 수정하고 마지막에 가상호스트 설정을 포함한다.

sudo vi /usr/local/nginx/conf/nginx.conf

  worker_processes  1;  

  events {
    worker_connections  1024;
  }

  http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on; 
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65; 
    #gzip  on;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

    include ../sites-enabled/*;
  }

default 가상호스트 설정

사용되지 않는 서브도메인이나 IP주소로 접속할 경우에 보여줄 페이지를 설정하는 것이다.

sudo vi /usr/local/nginx/sites-enabled/default.conf

  server {
    listen       80 default;
    server_name  _;  

    location / { 
      root   /var/www/default;
      index  index.html index.htm;
    }   
  } 

사이트 루트 디렉토리 생성

sudo mkdir /var/www/default


신고

댓글을 달아 주세요

  1. pentum 2017.01.11 17:11 신고

    안녕하세요
    내부 내트웍에서 pc한대를 우분투와 nginx를 깔고 다른 pc들 (192.168.0.xx) 에서 웹접속하여 사용하려고 합니다.
    지금은 브라우저에서 우분투 ip인 192.168.0.11으로 접속하면 뜨는데요
    다른pc에서 ip말고 도메인네임 (예: http://myweb/)으로 접속하면 뜨도록 할수는 없나요?

    • BlogIcon 흉내쟁이 2017.01.11 17:26 신고

      따로 구매하신 도메인이 없는 상태에서 도메인 네임으로 접속하시고 싶으신 거죠?

      넷상에서는 DNS 서버에 도메인이름이 등록되어 있어야 가능한데, 로컬에서는 이를 직접 수정하여 원하는 IP주소로 이동시킬 수가 있습니다. 도메인이란 것이 외우기 힘든 IP 주소를 문자화한 것에 지나지 않기때문입니다.

      윈도우상에서는
      1. 메모장을 관리자 권한으로 실행
      2. C: \ Windows \ System32 \ drivers \ etc \ hosts 파일을 메모장으로 끌어다 놓기(경로표기가 안되네요, 띄워쓰여진 곳은 역슬래시표기)

      3. hosts 파일의 하단에 아래와 같이 이동할 IP주소와 도메인명을 입력합니다. (IP주소를 적고 탭키로 공백을 확보하고 다시 도메인명을 입력)

      # My Redirect
      192.168.0.11 (탭) myweb

      4. 저장하고 접속을 시동해봅니다.

      위와 같은 방법으로 실제존재하는 도메인명들을 짧게 줄여쓰거나 다른 사이트로 연결할 수도 있습니다. 과거에 hosts 파일을 변조하여 해킹을 하던 수법도 이를 이용한 것이지요.

      도움이 되셨길 바랍니다.

  2. pentum 2017.01.11 17:38 신고

    아.. 잘됩니다.^^
    근데 각 pc의 hosts 파일을 수정안하고 할수는 없나요?
    공유기를 세팅한다던지 우분투에 dns 서버를 깐다던지..
    다른멤버들 pc에 hosts파일을 수정하기가 좀 그래서요..
    현재구성은 kt인터넷라인이 들어오고 공유기로 물려있어요..
    우분투 ip는 192.168.0.11로 되있고 우분투데스크탑 네트웍설정에 dns servers: 168.126.63.1 (kt dns?)로 셋팅되있구요..

    • BlogIcon 흉내쟁이 2017.01.11 17:55 신고

      가장 간단한 방법은 무엇보다 도메인 구매후 도메인을 사용하고 계신 외부IP 주소로 연결하고 공유기의 포트포워딩을 통해 원하는 서비스를 활성화하는 것일 겁니다.

      iptime에서 만든 공유기는 xxx.iptime.org 와 같이 서브도메인을 제공하기에 이를 통해 연결할 수도 있습니다.

      사용하고 계신 공유기도 이와 같은 서비스가 있는지 확인해보시고요.

      DNS서버의 경우 우분투의 버전에따라 설치방법이 상이하고 설정에 애로사항이 꽃피워 추천은 못하겠습니다. 이 블로그에 DNS서버와 관련하여 기술하기도 했지만 실제 도메인 연결을 가정하여 진행하였는데, 가상도메인을 이용할 수도 있을지는 미지수입니다.

  3. pentum 2017.01.11 18:05 신고

    감사합니다. 도움이 많이 됐습니다.^^

  4. hongseogi 2017.08.03 12:54 신고

    Red Hat VM 상에 NGINX 기반의 솔루션을 사용중입니다.
    이 솔루션은 웹기반의 콘솔과, Mobile Phone 에서 접근가능한 SDK 를 통해서 접근하도록 되어 있는데, 문제는
    웹기반의 콘솔이 외부 인터넷에 노출되어 있다는 것입니다.
    고객쪽에서 이 부분의 해결을 하고자 하는데, (외부인터넷을 통해 접근 못하도록 하면서, Mobile Phone 에서의 SDK 접속은 외부인터넷을 통해 접근할 수 있도록) 가상호스트가 해결책이 될 수 있을런지요.. ?
    솔루션에서는 아래의 방법을 써야 한다고 되어 있는데, 고객쪽에서는 IP 주소 / Port / Domain name 등 기반으로만 blocking 하는 정책을 쓰고 있어서 난감한 상태입니다.

    For security purposes, deploy the MobileFirst Quality Assurance VM image on a corporate intranet or DMZ behind an appropriately configured perimeter firewall. Do not expose the network interfaces of the VM directly to the internet.
    Close all ports on the firewall, with the possible exception of ports 443 (HTTPS) and 80 (HTTP). These ports must be open for devices on the Internet to communicate with the MobileFirst Quality Assurance server. If the MobileFirst Quality Assurance service is used only by enterprise apps that are deployed on the corporate intranet, then you can close ports 443 (HTTPS) and 80 (HTTP).
    If the HTTP and HTTPS are open, configure them to allow traffic only for HTTP requests for resources that meet the following pattern: http(s)://<host>/device/*. Block all other traffic. With this configuration, devices can access the MobileFirst Quality Assurance device API, but web browsers, web crawlers, or other clients on the internet cannot access the MobileFirst Quality Assurance web dashboard or its other HTTP services.

    • BlogIcon 흉내쟁이 2017.08.03 15:21 신고

      음, 해당 솔루션을 사용해보지 않은 입장에서는 명확히 답변을 드리기어렵습니다만, 기본적으로 외부 접속을 막는데는 포트 혹은 ip를 이용해 방화벽에서 접근을 막는법이 일반적인 방안입니다.

      모바일만을 예외로 두고자한것이라면 모바일인지 아닌지를 판단하고 접근시킬수 있겠으나 모바일 특성상 ip고정이 불가능하지 않을까 싶습니다.

티스토리 툴바