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

Jayne ·
更新时间:2024-11-13
· 935 次阅读

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

虚拟主机功能 把一台处于运行状态的物理服务器分割成多个“虚拟服务器” 无法实现硬件资源隔离,仅能限制硬盘的使用空间大小。 Apache的虚拟主机功能是服务器基于用户请求的不同ip地址主机域名端口号,实现提供多个网站同时为外部提供访问服务的技术。【用户请求的资源不同,最终获取的网页内容也不同】 基于IP地址访问网站 使用nmtui为虚拟机配置3个ip地址,分别为:
192.168.10.10
192.168.10.20
192.168.10.30
在这里插入图片描述
重启网络服务,并测试网络连通性:
在这里插入图片描述 修改网站数据目录为/home/www/html【若不修改网站数据目录,可以省略该步骤】
在这里插入图片描述 在网站数据目录/home/www/html下创建3个子目录,分别存放3个网站的数据。并分别写入各自的内容到默认首页index.html
在这里插入图片描述 修改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行开始写入以下内容 【指定ip的虚拟主机】 DocumentRoot "/home/www/html/10" 【网站数据目录】 ServerName "www.abong.com" 【网站服务器的域名】 【网站数据目录的信息】 AllowOverride None Require all granted DocumentRoot "/home/www/html/20" ServerName "bbs.abong.com" AllowOverride None Require all granted DocumentRoot "/home/www/html/30" ServerName "tech.abong.com" AllowOverride None Require all granted

打开firefox,输入网址:192.168.10.10,显示如下:
在这里插入图片描述
看过我其他博客的人,估计可以看出,肯定又是selinux安全上下文没有配置好。

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

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

基于主机域名访问网站

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

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

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

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

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

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

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

# 配置文件/etc/httpd/conf/httpd.conf # 从113行开始写入以下内容 【ip:端口号】 DocumentRoot "/home/www/html/8111" 【网站数据目录】 ServerName "www.abong.com" 【网站服务器的域名】 【网站数据目录的信息】 AllowOverride None Require all granted DocumentRoot "/home/www/html/8222" ServerName "bbs.abong.com" AllowOverride None Require all granted 在重启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地址主机域名端口号来访问网站的全部内容了。感谢大家的关注!!!
作者:熊博主



Linux ip 域名 Apache 端口号

需要 登录 后方可回复, 如果你还没有账号请 注册新账号