Linux-开启Apache的虚拟主机功能(基于IP地址、基于主机域名、基于IP:端口号)

一台服务器要是只能部署一个网站,那就难免有些浪费了。Apache服务的虚拟主机功能可以基于ip地址主机域名端口号来访问网站,这样就可以实现在一台服务器上部署多个网站了。

虚拟主机功能

  1. 把一台处于运行状态的物理服务器分割成多个“虚拟服务器”
  2. 无法实现硬件资源隔离,仅能限制硬盘的使用空间大小。
  3. Apache的虚拟主机功能是服务器基于用户请求的不同ip地址主机域名端口号,实现提供多个网站同时为外部提供访问服务的技术。【用户请求的资源不同,最终获取的网页内容也不同】

基于IP地址访问网站

  1. 使用nmtui为虚拟机配置3个ip地址,分别为:
    192.168.10.10
    192.168.10.20
    192.168.10.30
    在这里插入图片描述
    重启网络服务,并测试网络连通性:
    在这里插入图片描述
  2. 修改网站数据目录为/home/www/html【若不修改网站数据目录,可以省略该步骤】
    在这里插入图片描述
  3. 在网站数据目录/home/www/html下创建3个子目录,分别存放3个网站的数据。并分别写入各自的内容到默认首页index.html
    在这里插入图片描述
  4. 修改httpd服务的配置文件,以支持虚拟主机功能。修改完后要重启httpd服务。

AllowOverride【配置成不允许apache读取.htaccess文件的内容】
通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成“None”不允许任何Override(优先级)。

Require【访问资源限制,谁能访问资源】
Require all granted 允许所有请求访问资源
Require all denied 拒绝所有请求访问资源

# 配置文件/etc/httpd/conf/httpd.conf
# 从113行开始写入以下内容
<VirtualHost 192.168.10.10>   【指定ip的虚拟主机】
DocumentRoot "/home/www/html/10"   【网站数据目录】
ServerName "www.abong.com"  【网站服务器的域名】
<Directory "/home/www/html/10" >    【网站数据目录的信息】
AllowOverride None
Require all granted
</Directory>
</VirtualHost>


<VirtualHost 192.168.10.20>
DocumentRoot "/home/www/html/20"
ServerName "bbs.abong.com"
<Directory "/home/www/html/20" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>


<VirtualHost 192.168.10.30>
DocumentRoot "/home/www/html/30"
ServerName "tech.abong.com"
<Directory "/home/www/html/30" >
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
  1. 打开firefox,输入网址:192.168.10.10,显示如下:
    在这里插入图片描述
    看过我其他博客的人,估计可以看出,肯定又是selinux安全上下文没有配置好。

  2. 为网站数据目录/home/www/html及其目录下的文件添加selinux安全上下文,以支持httpd服务。
    查询下网站数据目录的selinux安全上下文,可以看到不是httpd服务所支持的,要修改。
    在这里插入图片描述
    从下图可以看到已修改好了
    在这里插入图片描述

  3. 再次打开网站,可以看到已经能够正常显示输入的内容了。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    至此,我们终于可以通过不同的ip地址去访问到不同的网站了。

基于主机域名访问网站

如果觉得ip地址太难记,或者ip地址不够用,可以考虑使用主机域名访问网站。可以通过不同的主机域名,去定位同一个ip地址来访问网站。在这里选取ip地址为:192.168.10.10

  1. 将多个主机域名和ip地址进行绑定关联【配置文件:/etc/hosts
    主机域名:
    www.abong.com
    bbs.abong.com
    tech.abong.com
    在这里插入图片描述
  2. 通过主机域名检查网络连通性,不用重启网络服务可直接验证。
    在这里插入图片描述
  3. 配置网站数据目录为/home/www/html,并创建3个子目录分别存放3个网站的数据。过程可参考"基于IP地址访问网站",这里只给我配置结果并调整好selinux安全上下文的问题。配置好后重启httpd服务
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 修改httpd服务的配置文件,以支持虚拟主机功能。修改完后要重启httpd服务。
# 配置文件/etc/httpd/conf/httpd.conf
# 从113行开始写入以下内容
<VirtualHost 192.168.10.10>
DocumentRoot "/home/www/html/www"
ServerName  "www.abong.com"
<Directory "/home/www/html/www">
AllowOverride None
Require all granted
</directory> 
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/www/html/bbs"
ServerName  "bbs.abong.com"
<Directory "/home/www/html/bbs">
AllowOverride None
Require all granted
</directory> 
</VirtualHost>

<VirtualHost 192.168.10.10>
DocumentRoot "/home/www/html/tech"
ServerName  "tech.abong.com"
<Directory "/home/www/html/tech">
AllowOverride None
Require all granted
</directory> 
</VirtualHost>
  1. 打开firefox,验证结果。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

基于IP地址:端口号访问网站

若是ip地址不够用,但是又不想使用主机域名,则可以使用ip地址:端口号的方式来访问网站。

  1. ip地址和端口号
    IP地址:192.168.10.10
    端口号:81118222

  2. 在网站数据目录/home/www/html下创建两个目录用于存放数据,并写入相关的内容。配置好相关的selinux安全上下文
    在这里插入图片描述

  3. 修改httpd服务的配置文件,添加监听8111和8222的端口号的参数
    在这里插入图片描述

  4. 修改httpd服务的配置文件,以支持虚拟主机功能。修改完后要重启httpd服务。

# 配置文件/etc/httpd/conf/httpd.conf
# 从113行开始写入以下内容
<VirtualHost 192.168.10.10:8111>   【ip:端口号】
DocumentRoot "/home/www/html/8111"  【网站数据目录】
ServerName "www.abong.com"  【网站服务器的域名】
<Directory "/home/www/html/8111">   【网站数据目录的信息】
AllowOverride None
Require all granted
</Directory> 
</VirtualHost>

<VirtualHost 192.168.10.10:8222>
DocumentRoot "/home/www/html/8222"
ServerName "bbs.abong.com"
<Directory "/home/www/html/8222">
AllowOverride None
Require all granted
</Directory> 
</VirtualHost>
  1. 在重启httpd服务的时候报错了,说是selinu安全子系统的问题。估计又是selinux安全上下文的问题。
    在这里插入图片描述
    SElinux服务会检测到8111、8222这两个端口是不属于Apache服务应有的资源,但是却以httpd服务程序的名义监听使用了,故SELinux会拒绝Apache服务使用这两个端口。
    semanage port -l | grep http 【查询与HTTP协议相关且SELinux服务允许的端口列表】
    在这里插入图片描述
    semanage port -a -t http_port_t -p tcp 8111 【添加端口号8111到与HTTP协议相关且SELinux服务允许的端口列表】
    semanage port -a -t http_port_t -p tcp 8222【添加端口号8222到与HTTP协议相关且SELinux服务允许的端口列表】
    在这里插入图片描述
    在这里插入图片描述
    6.再次重启httpd服务,可以正常重启,打开firefox,验证如下:
    在这里插入图片描述
    在这里插入图片描述

以上就是使用Apache的虚拟主机功能实现基于ip地址主机域名端口号来访问网站的全部内容了。感谢大家的关注!!!

发布了46 篇原创文章 · 获赞 41 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/104835269
今日推荐