学习目标:
提示:本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案
Linux系统:Ubuntu 23.04;
文中提到的“本机”:代表,宿主机,物理主机;
首先,本片文章 主要 解决的是本机(物理主机)访问不了虚拟机中的apache服务,直白地说,一个简单的现象 例如:本机浏览器中打不开Apache服务中的默认WEB页面,再阅读文章之前,请确定你的设备是否具备以下前提,方可在出现上述问题时,通过本文能决绝你的问题。
出现问题之前你的设备是否具备以下几点条件
- 您的本机是否可以与虚拟机进行双向互Ping(Ping成功状态);
- 虚拟机Ubuntu系统中是否已经安装并正确配置Apache服务;
- 在配置并启动Apache服务后,是否可以在虚拟机上正常访问Apache服务;
如果上面三点皆满足的情况下,出现本机访问不了虚拟机中Apache服务的情况,那么就可以继续往下看!~
如果以上三点某一点不满足,请先解决以上问题,后再试~
问题原因分析:
Ubuntu本机无法访问虚拟机中的Apache服务可能是由于以下原因造成的:
- Apache服务未正常运行。
- 防火墙设置阻止了访问。
- Apache配置文件中的监听端口不是80或者被其他服务占用。
- Apache没有正确配置为接受外部连接。
方案避坑:
在遇到问题后,先通过百度查询相关解决方案,其中看到最多的一个解决方案如下,亲测解决不了问题。
上面这个解决方案并不能解决问题,原因可能有以下几点:
- 上述解决方案的最初版本距离当前时间线 已经很远,可能在多次更新后已经不能解决此类问题。
- 上面这个方案的虚拟机是CentOS系统,不确定是否是系统的不同,导致,在执行第一条修改防火墙设置命令的时候,就出现了报错:
#报错信息如下:
iptables v1.8.7 (nf_tables): unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.
- 在解决以上报错并成功执行第一条修改防火墙设置命令后,发现第二步骤中指定的文件目录不存在。终止当前方案的继续测试。
结论:上面类似的解决方案并不能解决问题,但是如果你是CentOS系统,可以一试,看看是否还能找到目标文件并成功解决问题。
有效解决方案:
- 确认Apache服务运行状态:
sudo systemctl status apache2
—如果服务未运行,启动它:
sudo systemctl start apache2
- 检查防火墙设置;确认是否允许通过80端口::
sudo ufw status
上图是在执行查询防火墙设置后,发现防火墙只运行通过了22端口(SSH协议默认端口),而Apache的端口并没有被允许。
—如果没有,允许HTTP流量:
sudo ufw allow 'Apache'
再次查看,防火墙设置已经添加Apache,并且到此作者的问题已经得到解决,已经可以在物理机上访问Apache服务了,如果没有解决得小伙伴可以继续往下看~
- 检查Apache配置;查看Apache配置文件(默认端口80):
cat /etc/apache2/ports.conf
—如果端口不是80,修改为80或其他未被占用的端口。
当前文件是默认配置,默认监听80端口,如果你对port.conf 文件之前有所改动可以修改调整。
- 确认Apache配置为监听外部请求:
—查看/etc/apache2/sites-available/000-default.conf文件确认Listen 80和<VirtualHost *:80>指令。
cat /etc/apache2/sites-available/000-default.conf
- 如果有必要,重新加载Apache配置:
sudo systemctl reload apache2
- 如果以上步骤都不能解决问题,请检查是否有其他网络设置(本机防火墙等)或安全软件(如SELinux)导致连接问题。
相关链接:
1.sudo systemctl reload apache2命令的作用
1.Linux:防火墙相关命令使用(Ubuntu)