- 什么是虛擬主機(jī)
- Nginx 配置文件的結(jié)構(gòu)
- 基于 IP 的虛擬主機(jī)配置
- 基于端口的虛擬主機(jī)配置
- 基于域名的虛擬主機(jī)配置
什么是虛擬主機(jī)
虛擬主機(jī)是一種特殊的軟硬件技術(shù)晾腔,它可以將網(wǎng)絡(luò)上的每一臺(tái)計(jì)算機(jī)分成多個(gè)虛擬主機(jī),每個(gè)虛擬主機(jī)可以獨(dú)立對(duì)外提供 www 服務(wù)妓羊,這樣就可以實(shí)現(xiàn)一臺(tái)主機(jī)對(duì)外提供多個(gè) web 服務(wù)怎憋,每個(gè)虛擬主機(jī)之間是獨(dú)立的淌哟,互不影響的。
通過 Nginx 可以實(shí)現(xiàn)虛擬主機(jī)的配置拗小,Nginx 支持三種類型的虛擬主機(jī)配置
- 基于 IP 的虛擬主機(jī)
- 基于域名的虛擬主機(jī)
- 基于端口的虛擬主機(jī)
Nginx 配置文件的結(jié)構(gòu)
# ...
events {
# ...
}
http {
# ...
server{
# ...
}
# ...
server{
# ...
}
}
注:每個(gè) server 就是一個(gè)虛擬主機(jī)
基于 IP 的虛擬主機(jī)配置
Linux 操作系統(tǒng)允許添加 IP 別名,IP 別名就是在一塊物理網(wǎng)卡上綁定多個(gè) lP 地址樱哼。這樣就能夠在使用單一網(wǎng)卡的同一個(gè)服務(wù)器上運(yùn)行多個(gè)基于 IP 的虛擬主機(jī)哀九。
需求
- 一臺(tái) Nginx 服務(wù)器綁定兩個(gè) IP:192.168.75.145、192.168.75.245
- 訪問不同的 IP 請(qǐng)求不同的 HTML 目錄搅幅,即:
- 訪問
http://192.168.75.145
將訪問html145
目錄下的 html 網(wǎng)頁 - 訪問
http://192.168.75.245
將訪問html245
目錄下的 html 網(wǎng)頁
- 訪問
創(chuàng)建目錄及文件
在 /usr/local/docker/nginx/html
目錄下創(chuàng)建 html145
和 html245
兩個(gè)目錄阅束,并分辨創(chuàng)建兩個(gè) index.html 文件
綁定多 IP
ifconfig ens33:0 192.168.75.245 broadcast 192.168.75.255 netmask 255.255.255.0
配置虛擬主機(jī)
修改 /usr/local/docker/nginx
目錄下的 nginx.conf 配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 配置虛擬主機(jī) 192.168.75.145
server {
# 監(jiān)聽的ip和端口,配置 192.168.75.145:80
listen 80;
# 虛擬主機(jī)名稱這里配置ip地址
server_name 192.168.75.145;
# 所有的請(qǐng)求都以/開始茄唐,所有的請(qǐng)求都可以匹配此 location
location / {
# 使用 root 指令指定虛擬主機(jī)目錄即網(wǎng)頁存放目錄
# 比如訪問 http://ip/index.html 將找到 /usr/local/docker/nginx/html/html145/index.html
# 比如訪問 http://ip/item/index.html 將找到 /usr/local/docker/nginx/html/html145/item/index.html
root /usr/share/nginx/html145;
# 指定歡迎頁面息裸,按從左到右順序查找
index index.html index.htm;
}
}
# 配置虛擬主機(jī) 192.168.75.245
server {
listen 80;
server_name 192.168.75.245;
location / {
root /usr/share/nginx/html245;
index index.html index.htm;
}
}
}
基于端口的虛擬主機(jī)配置
需求
- Nginx 對(duì)外提供 80 和 8080 兩個(gè)端口監(jiān)聽服務(wù)
- 請(qǐng)求 80 端口則請(qǐng)求 html80 目錄下的 html
- 請(qǐng)求 8080 端口則請(qǐng)求 html8080 目錄下的 html
創(chuàng)建目錄及文件
在 /usr/local/docker/nginx/html
目錄下創(chuàng)建 html80
和 html8080
兩個(gè)目錄,并分辨創(chuàng)建兩個(gè) index.html 文件
配置虛擬主機(jī)
修改 /usr/local/docker/nginx
目錄下的 nginx.conf 配置文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 配置虛擬主機(jī) 192.168.75.145
server {
# 監(jiān)聽的ip和端口沪编,配置 192.168.75.145:80
listen 80;
# 虛擬主機(jī)名稱這里配置ip地址
server_name 192.168.75.145;
# 所有的請(qǐng)求都以/開始呼盆,所有的請(qǐng)求都可以匹配此 location
location / {
# 使用 root 指令指定虛擬主機(jī)目錄即網(wǎng)頁存放目錄
# 比如訪問 http://ip/index.html 將找到 /usr/local/docker/nginx/html/html145/index.html
# 比如訪問 http://ip/item/index.html 將找到 /usr/local/docker/nginx/html/html145/item/index.html
root /usr/share/nginx/html80;
# 指定歡迎頁面,按從左到右順序查找
index index.html index.htm;
}
}
# 配置虛擬主機(jī) 192.168.75.245
server {
listen 8080;
server_name 192.168.75.245;
location / {
root /usr/share/nginx/html8080;
index index.html index.htm;
}
}
}
注意: 別忘記將容器的 8080 端口映射到宿主機(jī)蚁廓,否則無法訪問 8080 端口
基于域名的虛擬主機(jī)配置
需求
- 兩個(gè)域名指向同一臺(tái) Nginx 服務(wù)器访圃,用戶訪問不同的域名顯示不同的網(wǎng)頁內(nèi)容
- 兩個(gè)域名是 admin.ooqiu.com 和 service.ooqiu.com
- Nginx 服務(wù)器使用虛擬機(jī) 192.168.75.145
配置 Windows Hosts 文件
- 通過 host 文件指定 admin.ooqiu.com 和 service.ooqiu.com 對(duì)應(yīng) 192.168.75.145 虛擬機(jī):
- 修改 window 的 hosts 文件:(C:\Windows\System32\drivers\etc)
創(chuàng)建目錄及文件
在 /usr/local/docker/nginx/html
目錄下創(chuàng)建 htmladmin
和 htmlservice
兩個(gè)目錄,并分辨創(chuàng)建兩個(gè) index.html 文件
配置虛擬主機(jī)
user nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name admin.ooqiu.com;
location / {
root /usr/share/nginx/htmladmin;
index index.html index.htm;
}
}
server {
listen 80;
server_name service.ooqiu.com;
location / {
root /usr/share/nginx/htmlservice;
index index.html index.htm;
}
}
}