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服務的虛擬主機