继续我的 Nginx 学习之旅,今天谈谈虚拟主机的配置。那何为虚拟主机呢?虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台 "虚拟" 的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的 Internet 服务器功能,同一台主机上的虚拟主机之间是完全独立的。利用虚拟主机,不用为每个要运行的网站提供一台单独的 Nginx 服务器或单独运行一组 Nginx 进程,虚拟主机提供了在同一台服务器,同一组 Nginx 进程上运行多个网站的功能。跟 Apache 一样,Nginx 也可以配置多种类型的虚拟主机,一是基于 IP 的虚拟主机,二是基于域名的虚拟主机,三是基于端口的虚拟主机。
(一)配置基于 IP 的虚拟主机
Linux 操作系统准许添加 IP 别名,即可以在一块物理网卡上绑定多个 IP 地址。这样就能够在使用单一网卡的同一服务器上运行多个基于 IP 的虚拟主机。设置 IP 别名也非常简单,只需配置系统上的网卡接口,让它监听额外的 IP 地址。在 Linux 系统上可以使用标准的网络配置工具(比如 ifconfig 和 route 命令)添加 IP 别名。使用 ifconfig 命令查看该服务器的 IP 地址。
本地回环代表设备的虚拟接口,所以默认被看作是永远不会宕掉的接口,它的主要作用有两个:一是测试本机的网络配置,能 PING 通 127.0.0.1 说明本机的网卡和 IP 协议安装都没有问题; 二是某些 SERVER/CLIENT 的应用程序在运行时须调用服务器上的资源,一般要指定 SERVER 的 IP 地址,但当该程序要在同一台机器上运行且没有别的 SERVER 时,就可以把 SERVER 的资源装在本机上,SERVER 的 IP 地址设为 127.0.0.1 也同样可以运行。
如果要在 eth0 网卡设备上添加一个 IP 别名 192.168.1.223 可以通过 ifconfig 和 route 命令来进行:
- ifconfig eth0: 0 192.168.1.223 broadcast 192.168.1.255 netmask 255.255.255.0 up
或者
- route add - host 192.168.1.223 dev eth0: 0
eth0:0 表示 eth0 网卡的第 1 个虚拟 ip, 当然也可以开第二个第三个,依次为 eth0:1,eth0:2
broadcast 后面跟的是广播地址
netmask 后面跟的是子网掩码
up 表示激活
dev 后面表示的设备名
如果上面指令不成功,看看是不是权限问题,切换到 root 下试试
通过 ifconfig 和 route 配置的 IP 别名在服务器重启后会消失,可以将这两条 ifconfigt 和 route 命令添加到 / etc/rc.local 文件中,让系统开机时自动运行
/sbin/ifconfig eth0:0 192.168.1.223 broadcast 192.168.1.255 netmask 255.255.255.0 up
或者
/sbin/route add -host 192.168.1.223 dev eth0:0
为什么是 / sbin/ifconfig。因为这些命令的可执行文件在 / sbin 目录下,可以用 whereis 命令查看。
清除虚拟 IP 可用以下命令:
- ifconfig eth0: x down
x 表示虚拟网络的接口。
或者
- ip addr del v_ip dev eth0
v_ip 表示所创建的虚拟 IP
建设已经创建了两个虚拟 ip,分别为 192.168.8.16,192.168.8.18,下面看看如何配置这两个虚拟 IP
- http { include mime.types; default_type application / octet - stream; keepalive_timeout 65; access_log log / server1.access.log combined; server { listen 192.168.8.16 : 80; #监听的IP和端口 server_name 192.168.8.16; #主机名称 location / { index index.html index.htm; root / data0 / hrdocs / server1;
- }
- } server { listen 192.168.8.18 : 80; server_name 192.168.8.18; location / { index index.html index.htm; root / data0 / hrdocs / server1;
- }
- }
一个 Server{....} 就是一个虚拟主机,如果本配置多个虚拟主机,建立多段 server{}配置即可非常方便,监听的 IP 和端口,也可以不写 IP 地址,只写端口,把它配置成 "listen 80",则表示监听该服务器上所有 IP 的 80 端口可通过 server_name 区分不同的虚拟主机
(二)基于域名的虚拟主机
基于域名的虚拟主机是最常见的一种虚拟主机。只需配置你的 DNS 服务器,将每个主机名映射到正确的 lP 地址,然后配置 Nginx 服务器,令其识别不同的主机名就可以了。这种虚拟主机技术,使很多虚拟主机可以共享同一个 lP 地址,有效解决了 lP 地址不足的问题。所以,如果没有特殊要求使你必须用一个基于 lP 的虚拟主机,最好还是使用基于域名的虚拟主机。
我们可以通过编辑 / etc/hosts 加入虚拟域名以便解析,来测试一下。在 hosts 文件中加入
127.0.0.2
如下图:
然后保存退出,执行如下命令,重启该文件的内容
- source hosts
然后 ping 命令做一下小测试,看 127.0.0.2 通不通
从结果上来看,ping 127.0.0.2 和 都是通的。接下来配置 Nginx。配置如下:
- server { listen 80; server_name www.test.com; location / { root / home / liulonghua / 下载 / conFusion; index index.html;#当然如果你有更好的模板HTML文件,也可以换的,改下root路径就行
- }
- }
然后保存退出,用 nginx -t 测试配置是否有误,无误的话执行下面命令重启 Nginx
- service nginx restart
然后打开浏览器,输入网站
这里只是举了一个简单的例子,实际生产肯定比这个要复杂。
(三)基于端口的虚拟主机配置
使用端口来区分,浏览器使用域名或 ip 地址: 端口号
看下面的配置:
- server { listen 8080; server_name www.test.com; location / { root / home / liulonghua / 下载 / conFusion; index index.html;
- }
- } server { listen 9090; server_name 127.0.0.1; location / { root / usr / share / nginx / html; index index.html;
- }
- }
这个时候通过浏览器访问。
参考资料:《实战 Nginx》
来源: http://www.bubuko.com/infodetail-1863920.html