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