nginx虚拟主机的配置与使用
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。
利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。
基于域名的虚拟主机
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name www.morris.com;
location / {
echo 'www.morris.com';
}
}
server {
listen 80;
server_name static.morris.com;
location / {
echo 'static.morris.com';
}
}
}
在C:\Windows\System32\drivers\etc\hosts
文件下添加如下内容:
10.0.3.137 www.morris.com
10.0.3.137 static.morris.com
10.0.3.137 static.morris.cn
演示结果如下:
$ curl -s http://www.morris.com
www.morris.com
curl -s http://static.morris.com
static.morris.com
$ curl -s http://static.morris.cn
www.morris.com
总结:
- 不同域名的请求可以发送到同一个nginx的端口上,nginx可以根据域名来对请求进行处理。
- 如果是一个未知域名的请求,nginx默认使用第一个server来处理请求,也可以手动指定,如
listen 80 default_server;
。
基于端口的虚拟主机
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
location / {
echo '80';
}
}
server {
listen 8080;
location / {
echo '8080';
}
}
}
测试结果如下:
$ curl -s http://10.0.3.137
80
$ curl -s http://10.0.3.137:8080
8080
基于IP的虚拟主机
虚拟主机需要两个IP,可以使用ifconfig为虚拟主机增加IP:
ifconfig ens32:2 192.168.252.21
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 192.168.252.20:80;
location / {
echo '192.168.252.20:80';
}
}
server {
listen 192.168.252.21:80;
location / {
echo '192.168.252.21:80';
}
}
}
测试结果如下:
$ curl -s http://192.168.252.20
192.168.252.20:80
$ curl -s http://192.168.252.21
192.168.252.21:80