1. 程式人生 > >Nginx服務的虛擬主機

Nginx服務的虛擬主機

目錄 nginx服務 dns服務器 root () 創建網站 解析結果 str kill

虛擬主機技術實現了不用為每一個要運行的網站提供一臺單獨的Nginx服務器或者運行一組單獨的Nginx進程,虛擬主機提供了在同一臺服務器上或同一組Nginx進程上運行多個網站的功能。
Nginx跟Apache一樣,也可配置多種類型的虛擬主機,Apache搭建虛擬主機請參見Apache搭建虛擬主機;

Nginx創建虛擬主機類型:

  • 基於IP的虛擬主機
  • 基於域名的虛擬主機
  • 基於端口的虛擬主機

使用Nginx搭建虛擬主機服務器時,每個虛擬web站點擁有獨立的“server{}”配置段,各自監聽地址,端口號以及網站域名。

實驗環境

  • Linux系統:Redhat6.5
  • Nginx服務軟件:nginx-1.12
  • DNS服務器:192.168.100.111

實驗部署

由於基於IP的虛擬主機需要在服務器端配置多個網卡,且每個網卡需要不同IP地址,受到IP地址限制以及成本控制,這種虛擬主機的配置成本偏高,故在本文中不做贅述!

1、基於域名的虛擬主機

實現基於域名的虛擬主機首先需要配置DNS域名解析服務,詳細過程請參見DNS域名解析服務配置;這裏我選擇域名為www.one.com和www.two.com兩個域名。
解析結果如下:
技術分享圖片

註:配置不同域名的虛擬主機有兩種方式:
一是在原有配置文件中直接加入“server()”版塊。
二是在Nginx的配置文件目錄conf下新建虛擬主機配置文件vhost.conf
然後在主配置文件中添加行:include /usr/local/nginx/conf/*.conf

本文采用上述第二種配置方式為例,實現基於域名的虛擬主機:

讓Nginx主配置文件支持虛擬主機配置文件

vim /usr/local/nginx/conf/nginx.conf

在主配置文件末尾大括號以內加入以下行:


        include /usr/local/nginx/conf/vhost/*.conf;

}

創建網站域名站點:

mkdir -p /var/www/one //創建one.com站點
mkdir -p /var/www/two //創建two.com站點

echo "this is one web" > /var/www/one/index.html   //創建域名one.com測試首頁
echo "this is two web" > /var/www/two/index.html   //創建域名two.com測試首頁

創建虛擬主機單獨配置文件:

cd /usr/local/nginx/conf
mkdir vhost
cd vhost
vim vhost.conf //虛擬主機獨立配置文件

server {
        server_name  www.one.com;    //虛擬主機名稱
        location / {
            root   /var/www/one;     //站點位置
            index  index.html index.php;
        }
    }
    server {
        server_name  www.two.com;
        location / {
            root   /var/www/two;
            index  index.html index.php;
        }
    }

配置完成後,重啟Nginx服務;基於域名的虛擬主機訪問情況如下:

技術分享圖片

技術分享圖片

2、基於端口的虛擬主機

按照上述基於域名的虛擬主機,為每一個不同端口創建不同站點,添加獨立的虛擬主機配置文件/conf/vhost/vhost.conf,且需要在主配置文件中添加:

 include /usr/local/nginx/conf/vhost/*.conf;

}

cd /usr/local/nginx/conf/vhost
vim /vhost.conf //編輯虛擬主機獨立配置文件

server {
        listen 192.168.100.111:250;        //監聽服務器的端口
        server_name 192.168.100.111:250;
        location / {
            root   /var/www/one;     //首頁站點
            index  index.html index.php;   //支持首頁文件類型
        }
    }
    server {
        listen 192.168.100.111:222;
        server_name 192.168.100.111:222;
        location / {
            root   /var/www/two;
            index  index.html index.php;
        }
    }

註:此處需要註意的是與Apache虛擬主機基於端口模式區別,在Apache中添加虛擬端口後,需要在主配置文件中增加監聽端口,而Nginx中虛擬主機獨立配置文件已經註明服務IP地址的端口,因此不需要在主配置文件中增加監聽端口。

killall -3 nginx //停止Nginx服務
nginx -t //檢查主配置文件
nginx //啟動Nginx服務

啟動服務後,當用客戶端訪問其相同IP不同端口時,即出現不同頁面:
技術分享圖片
技術分享圖片

Nginx服務的虛擬主機