咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
nginx 虚拟主机原理和配置
虚拟主机与域名解析
虚拟主机使用特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每一台虚拟主机都具有独立的域名,具
有完整的 Internet 服务器(WWW、FTP、Email 等)功能,虚拟主机之间完全独立,并可由用户自行管理,在外界看来,每一台虚拟主机
和一台独立的主机完全一样。
域名解析就是域名到 IP 地址的转换过程,IP 地址是网路上标识站点的数字地址,为了简单好记,采用域名来代替 ip 地址标识站点地址,。
域名的解析工作由 DNS 服务器完成。
虚拟主机原理
虚拟主机是为了在同一台物理机器上运行多个不同的网站,提高资源利用率引入的技术。
一般的 web 服务器一个 ip 地址的 80 端口只能正确对应一个网站。web 服务器在不使用多个 ip 地址和端口的情况下,如果需要支持多个
相对独立的网站就需要一种机制来分辨同一个 ip 地址上的不同网站的请求,这就出现了主机头绑定的方法。简单的说就是,将不同的网
站空间对应不同的域名,以连接请求中的域名字段来分发和应答正确的对应空间的文件执行结果。举个例子来说,一台服务器 ip 地址为
10.0.0.12,有两个域名和对应的空间在这台服务器上,使用的都是 10.0.0.12 的 80 端口来提供服务。如果只是简单的将两个域名 A 和 B
的域名记录解析到这个 ip 地址,那么 web 服务器在收到任何请求时反馈的都会是同一个网站的信息,这显然达不到要求。接下来我们使
用主机头绑定域名 A 和 B 到他们对应的空间文件夹 C 和 D。当含有域名 A 的 web 请求信息到达 10.0.0.12 时,web 服务器将执行它对应
的空间 C 中的首页文件,并返回给客户端,含有域名 B 的 web 请求信息同理,web 服务器将执行它对应的空间 D 中的首页文件,并返回
给客户端,所以在使用主机头绑定功能后就不能使用 ip 地址访问其上的任何网站了,因为请求信息中不存在域名信息,所以会出错。
虚拟主机的配置
方式一:监听不同域名
配置nginx.conf
# 在http模块下添加多个server,监听不同的域名
...
http {
...
# 虚拟主机test80.xlyw.top
server {
#监听端口
listen 80;
#域名,可以有多个,用空格隔开
server_name test80.xlyw.top;
#配置根目录以及默认页面
location / {
root /www/test80;
index index.html index.htm;
}
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
# 虚拟主机test81.xlyw.top
server {
#监听端口
listen 80;
#域名,可以有多个,用空格隔开
server_name test81.xlyw.top;
#配置根目录以及默认页面
location / {
root /www/test81;
index index.html index.htm;
}
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
方式二:监听不同端口
http {
...
#虚拟主机的配置
server {
#监听端口
listen 80;
#域名,可以有多个,用空格隔开
server_name localhost;
#配置根目录以及默认页面
location / {
root /www/test80;
index index.html index.htm;
}
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
#虚拟主机的配置
server {
#监听端口
listen 81;
#域名,可以有多个,用空格隔开
server_name localhost;
#配置根目录以及默认页面
location / {
root /www/test81;
index index.html index.htm;
}
#出错页面配置
error_page 500 502 503 504 /50x.html;
#/50x.html文件所在位置
location = /50x.html {
root html;
}
}
}