访问web服务,本质上看(从协议上)是访问某个IP的主机上的某个端口(默认是80),通常需要通过访问不同的域名或者端口,实现对不同网站的访问(具体到服务器里就是不同目录),这个时候就需要设置网站空间。通常分为3种:基于域名、基于端口、基于IP以及它们的混合。
简单来说,Apache虚拟主机就是在一个Apache服务器上配置多个虚拟空间,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录。
使用httpd可以非常方便的构建虚拟主机服务器,只需要运行一个httpd服务就能够同时支撑大量的web站点
[root@4CentOS ~]# yum -y install bind
……省略部分……
已安装:
bind.x86_64 32:9.11.4-16.P2.el7_8.6
作为依赖被升级:
bind-libs.x86_64 32:9.11.4-16.P2.el7_8.6
bind-libs-lite.x86_64 32:9.11.4-16.P2.el7_8.6
bind-license.noarch 32:9.11.4-16.P2.el7_8.6
bind-utils.x86_64 32:9.11.4-16.P2.el7_8.6
完毕!
[root@4CentOS ~]# yum -y install httpd
……省略部分……
已安装:
httpd.x86_64 0:2.4.6-93.el7.centos
作为依赖被安装:
httpd-tools.x86_64 0:2.4.6-93.el7.centos
mailcap.noarch 0:2.1.41-2.el7
完毕!
为每个虚拟主机使用不同的域名,但是其对应的IP地址使相同的
域名不同–IP相同,端口相同
基于域名是最为普遍的虚拟web主机类型
[root@4CentOS ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; ##监听端口改为 any
……省略部分……
allow-query { any; }; ##也改为any
[root@4CentOS ~]# vim /etc/named.rfc1912.zones
…复制文件内的模板,粘贴进行编辑……
12 zone "ora.com" IN {
13 type master;
14 file "ora.com.zone";
15 allow-update { none; };
16 };
17 zone "nge.com" IN {
18 type master;
19 file "nge.com.zone";
20 allow-update { none; };
21 };
[root@4CentOS ~]# cd /var/named/
[root@4CentOS named]# ls
data named.ca named.localhost slaves
dynamic named.empty named.loopback
[root@4CentOS named]# cp -p named.localhost ora.com.zone ##这边需要 -p 保留原文件的权限
[root@4CentOS named]# vim ora.com.zone ##与区域配置文件里的文件名相呼应
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 20.0.0.4 ##删除本来的自身环回 IP,增加这行,IP 为自身IP
[root@4CentOS named]# cp -p ora.com.zone nge.com.zone
##这行复制之后不需要修改,因为解析的 IP 为一样的
[root@4CentOS named]# systemctl start named
[root@4CentOS named]# echo "nemeserver 20.0.0.4" > /etc/resolv.conf ##指向自己
[root@4CentOS named]# nslookup www.ora.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.ora.com
Address: 20.0.0.4
[root@4CentOS named]# nslookup www.nge.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: www.nge.com
Address: 20.0.0.4
[root@4CentOS named]# cd /
[root@4CentOS /]# cd /etc/httpd/conf
[root@4CentOS conf]# ls
httpd.conf magic
[root@4CentOS conf]# mkdir fenji
[root@4CentOS conf]# cd fenji/
[root@4CentOS fenji]# vim vhost.conf
……下面1-18都为手敲,没有模板……
1
2 DocumentRoot "/var/www/html/ora"
3 ServerName www.ora.com
4 Errorlog "logs/www.ora.com.error_log"
5 Customlog "logs/www.ora.com.error_log" common
6
7 Require all granted
8
9
10
11 DocumentRoot "/var/www/html/nge"
12 ServerName www.nge.com
13 Errorlog "logs/www.nge.com.error_log"
14 Customlog "logs/www.nge.com.error_log" common
15
16 Require all granted
17
18
添加虚拟主机主页
[root@4CentOS /]# cd /var/www/html/
[root@4CentOS html]# ls
[root@4CentOS html]# mkdir ora nge
[root@4CentOS html]# echo "This is Ora index
" > ora/index.html
[root@4CentOS html]# echo "This is Nge index
" > nge/index.html
[root@4CentOS html]# tree /var/www/html/ ##使用 tree 命令查看文件树
/var/www/html/
├── nge
│ └── index.html
└── ora
└── index.html
2 directories, 2 files
添加虚拟主机站点
[root@4CentOS /]# vim /etc/httpd/conf/httpd.conf
……在最后一行添加……
Include conf/fenji/vhost.conf
[root@4CentOS fenji]# systemctl start httpd
[root@4CentOS fenji]# setenforce 0
[root@4CentOS fenji]# iptables -F
这种方式并不使用域名,IP地址来区分不同的站点内容,而是使用不同的TCP端口号
因此用户在浏览不同的虚拟站点时需要同时制定端口号才能访问
IP相同,端口不同
修改虚拟主机配置,在第二个虚拟主机的端口部分改为 8080,改为别的也行
[root@4CentOS /]# vim /etc/httpd/conf/fenji/vhost.conf
……省略部分……
DocumentRoot "/var/www/html/nge"
ServerName www.nge.com
Errorlog "logs/www.nge.com.error_log"
Customlog "logs/www.nge.com.error_log" common
Require all granted
……省略部分……
[root@4CentOS /]# vim /etc/httpd/conf/httpd.conf
Listen 20.0.0.4:80 ##监听地址改为本机 IP,80端口
Listen 20.0.0.4:8080 ##监听地址改为本机 IP,8080端口·
#Listen 80 ##关闭 IPv6 监听
[root@4CentOS /]# systemctl reload httpd
[root@4CentOS /]# systemctl restart httpd
[root@4CentOS /]# netstat -natp |grep httpd
tcp 0 0 20.0.0.4:8080 0.0.0.0:* LISTEN 68168/httpd
tcp 0 0 20.0.0.4:80 0.0.0.0:* LISTEN 68168/httpd
为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同
这种方式需要为服务器配备多个网络接口,因此应用不是很广泛
IP不同,端口相同
在上面的配置下进行修改
[root@4CentOS /]# cd /etc/sysconfig/network-scripts/
[root@4CentOS network-scripts]# cp ifcfg-ens33 ifcfg-ens34
[root@4CentOS network-scripts]# vim ifcfg-ens34
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens34"
DEVICE="ens34"
ONBOOT="yes"
IPADDR="20.0.0.41"
PREFIX="24"
GATEWAY="20.0.0.2"
DNS1="114.114.114.114"
[root@4CentOS network-scripts]# systemctl restart network
[root@4CentOS /]# cd /etc/httpd/conf/
[root@4CentOS conf]# cd fenji/
[root@4CentOS fenji]# vim vhost.conf
## * 改为 ip 地址
DocumentRoot "/var/www/html/ora"
ServerName www.ora.com
Errorlog "logs/www.ora.com.error_log"
Customlog "logs/www.ora.com.error_log" common
Require all granted
## * 改为 ip 地址
DocumentRoot "/var/www/html/nge"
ServerName www.nge.com
Errorlog "logs/www.nge.com.error_log"
Customlog "logs/www.nge.com.error_log" common
Require all granted
[root@4CentOS conf]# vim httpd.conf
#
Listen 20.0.0.4:80
Listen 20.0.0.41:80
[root@4CentOS conf]# systemctl start httpd
[root@4CentOS conf]# netstat -natp |grep httpd
tcp 0 0 20.0.0.41:80 0.0.0.0:* LISTEN 69178/httpd
tcp 0 0 20.0.0.4:80 0.0.0.0:* LISTEN 69178/httpd