构建虚拟主机的原理:

   ★为什么要建立虚拟主机呢?

真的,为什么要建立虚拟主机,我觉得这个问题很不错!

答案: 因为,建立虚拟主机已经成为网络发展不可取代的一部分!随着Internet用户的增多,越来越多的服务器开始承受不了巨大的访问量。这时呢,就出现了虚拟主机,           虚拟主机可以使多台虚拟机共享一台真实主机的资源,大大的增强了放服务器和通讯线路的利用率,使得一台服务器上能够,毫无冲突地配置多个网络的ip地址,这意味着人们可以把多个域名建立在一个服务器上,不必再为建立一个站点而购置单独的服务器和用巨资申请专线作为信息的出入口。 现在大部分国外企业建站都采用这用服务硬盘空间租用的方式(即虚拟主机)。为适应我国进入WTO后日益激烈的国际商业竞争环境,加快对投资小、收益快的网上交易平台的应用,加强电子商务、企业上网等信息化建设的力度,虚拟主机建站已成为提高企业竞争力的重要手段!

 

 

理论:

 

 

 

1. 基于 ip的虚拟主机

 

可利用虚拟主机在一块物理网卡上绑定多个虚拟Ip

 

可以在一块物理网卡上绑定多个lP地址。这样就能够在使用单一网卡的同一个服务器上运行多个基于IP的虚拟主机。设置IP别名也非常容易,只须配置系统上的网络接口,让它监听额外的lP地址。

 

 

 

 

 

  2.基于域名的虚拟主机

 

基于域名的虚拟主机是最常见的一种虚拟主机。只需配置你的DNS服务器,将每个主机名映射到正确的lP地址,然后配置Nginx服务器,令其识别不同的主机名就可以了。这种虚拟主机技术,使很多虚拟主机可以共享同一个lP地址,有效解决了lP地址不足的问题。所以,如果没有特殊要求使你必须用一个基于lP的虚拟主机,最好还是使用基于域名的虚拟主机。

 

编辑/etc/hosts加入虚拟域名以便解析。

 

 

 

 3.  基于端口的虚拟主机

 

基于端口的虚拟主机配置,使用端口来区分,浏览器使用域名或ip地址:端口号访问。

 

 

 

实践篇:

 

基于域名的虚拟主机:

 

  1. 进入Nginx主配置文件里,在最后一行的大括号中间加入

 

Include vhost/.*conf;
 
[root@king~]# vim /usr/local/nginx/conf/nginx.conf
  #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    include vhost/*.conf;}

解释: include 的英文含义是 :包含;包括

1.一般在企业里我们很少去改动主配置文件,即使改动,改动之前也一定要做

备份,在确保万无一失的情况下,我们在进行修改。

2.那么,这段配置的含义就是,配置一个额外的域名,这个域名的主配置文件在

Vhost的目录里,目录的主配置文件是以.conf 为后缀的任意配置文件。其中*

代表所有的。

3.那么最后我们要在conf下(因为没有指定文件的绝对路径,所以我们就在conf)

下建立一个配置文件的目录,目录名称必须和主配置文件的描述信息一致,

然后建立配置文件。可以是a.conf ....

实验1,基于域名的虚拟主机

[root@king conf]# cd /usr/local/nginx/conf/
[root@king conf]# ls
fastcgi.conf            koi-win             nginx.conf.default    vhost
fastcgi.conf.default    mime.types          scgi_params           win-utf
fastcgi_params          mime.types.default  scgi_params.default
fastcgi_params.default  nginx.conf          uwsgi_params
koi-utf                 nginx.conf.bak      uwsgi_params.default[root@king conf]# cd vhost/
[root@king vhost]# ls
vhost.conf
[root@king vhost]# vi vhost.conf
server {
        listen      80;
        server_name  www.amber.com;
        root   /var/www/www.amber.com;
        location / {
            index  index.html index.htm;
            }
  }
[root@king vhost]# echo "<h1> Nice Work! </h1>" >/var/www/www.amber.com/index.html
[root@king vhost]# service iptables stop
[root@king vhost]# setenforce 0
setenforce: SELinux is disabled
[root@king vhost]# nginx -s reload
[root@king vhost]# curl http://www.amber.com<h1> Nice Work! </h1>
成功访问!

实验2 : 基于ip的虚拟主机

[root@king ~]# ifconfig eth0:0 192.168.150.100
[root@king ~]# ip a
   eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
   inet 192.168.150.10/24 brd 192.168.150.255 scope global eth0
    inet 192.168.150.100/24 brd 192.168.150.255 scope global secondary eth0:0


    

 2.进入虚拟配置文件在listen后面插入要修改的内容

[root@king ~]# vi /usr/local/nginx/conf/vhost/vhost.conf
 server {
        listen      192.168.150.100:80;
        server_name  www.amber.com;
        root   /var/www/www.amber.com;
        location / {
            index  index.html index.htm;
            }
  }
[root@king ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: [warn] 10240 worker_connections exceed open file resource limit: 1024

在用Nginx -t 查看命令的时候发现ulimit值(最大打开文件的数量)不够,那么我就用 ulimit -n 80000 让这个数值变大(修改时要比1024大才可以)

[root@king ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

再次检查发现没有了问题,可以正常访问!

[root@king ~]# nginx -s reload  重新启动,但不停服务
 
[root@king ~]# curl http://192.168.150.100<h1> Nice Work! </h1>

访问成功啦!

实验三: 基于端口的虚拟主机

1.进入虚拟配置文件里在ip地址的后面直接输入:8080来修改端口号

2.检查端口是否存在

3.重启服务

4.开始访问

[root@king ~]# cd /usr/local/nginx/conf/vhost/
[root@king vhost]# ls
vhost.conf
[root@king vhost]# vi vhost.conf 
server {
        listen      192.168.150.100:8080;
        server_name  www.amber.com;
        root   /var/www/www.amber.com;
        location / {
            index  index.html index.htm;
            }
  }

查看监听的端口,发现没问题!

[root@king vhost]# netstat -anpt |grep nginx
tcp        0      0 192.168.150.100:8080        0.0.0.0:*                   LISTEN      1797/nginx          
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1797/nginx          
[root@king vhost]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@king vhost]# curl http://192.168.150.100:8080<h1> Nice Work! </h1>

成功啦!