背景
我一直在使用只有一个站点的 Apache 服务器,而且效果非常好。我工作的单站点配置是问题的根源。最近,我不得不在本地创建另外两个站点,我发现这指南展示了如何做到这一点。我还参考了这stack overflow 问题也对我有很大帮助。
/etc/hosts
我的问题是,当我访问我在中创建和配置的三个主机时httpd-vhosts.conf
,它不工作,并且its-site.test refused to connect.
在我尝试在浏览器中访问它时显示。
尝试的解决方案
我尝试通过以下方式解决该问题这堆栈溢出问题帮助我更好地理解配置,但它仍然不起作用并导致同样的问题。
在花了几天时间尝试解决方案并浏览 Apache 文档后,我打开了一个新的 Stack Overflow 问题并随后被引导到该网站寻求进一步帮助。
不用说,我对 Apache 还很陌生,所以我可能会忽略一些显而易见的东西。
我的预期设置
我有三个不同的网站,我想在开发过程中使用命名虚拟主机在浏览器中访问它们。我不想使用一个本地主机和几个基于命名的虚拟主机,而是希望所有三个网站都是基于名称的虚拟主机,网址如下:
- 其站点.测试
- 其-cab.测试
- 其画廊.测试
如果由于某种原因不推荐这样做,我可以灵活地使用名称,但我想使用基于名称的虚拟主机和三个不同的 URL,因为这些站点是不相关的。
Hosts 文件
/etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
127.0.0.1 its-site.test
127.0.0.1 its-cab.test
127.0.0.1 its-gallery.test
httpd 配置
/opt/homebrew/etc/httpd/httpd.conf
Listen 80
Include /opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
ServerName localhost:80
# Also enabled PHP but not including the config here as it may not be relevant
vhosts 配置
/opt/homebrew/etc/httpd/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerName its-site.test
ServerAlias *.its-site.test
DocumentRoot "/Users/ciesinsg/Documents/Repositories/its-site/web"
<directory "/Users/ciesinsg/Documents/Repositories/its-site/web">
Require all granted
AllowOverride All
</directory>
</VirtualHost>
<VirtualHost *:80>
ServerName its-cab.test
ServerAlias *.its-cab.test
DocumentRoot "/Users/ciesinsg/Documents/Repositories/its-cab/web"
<directory "/Users/ciesinsg/Documents/Repositories/its-cab/web">
Require all granted
AllowOverride All
</directory>
</VirtualHost>
<VirtualHost *:80>
ServerName its-gallery.test
ServerAlias *.its-gallery.test
DocumentRoot "/Users/ciesinsg/Documents/Repositories/its-gallery/web"
<directory "/Users/ciesinsg/Documents/Repositories/its-gallery/web">
Require all granted
AllowOverride All
</directory>
</VirtualHost>
问题
有人看到我在这个配置中哪里犯了错误并能指出解决方案吗?
附加信息
- M1 的 Macbook Air
- 使用 homebrew 安装 Apache 和 PHP
以前的单站点工作配置
如前所述,当我只为一个站点提供服务时,这个功能运行良好。我唯一的配置是使用httpd.conf
,没有配置/etc/hosts
或httpd-vhosts.conf
。我的工作httpd.conf
文件如下所示:
Listen 80
DocumentRoot "/Users/ciesinsg/Documents/Repositories/its-gallery/web"
<Directory "/Users/ciesinsg/Documents/Repositories/its-gallery/web">
# Also enabled PHP
当我配置VirtualHosts时,我删除了和DocumentRoot
。<Directory>
答案1
我能够使用以下解决方案解决该问题:
测试 PHP
首先,我etc/hosts
使用 ping 测试了我的配置:
ciesinsg@NB-00304-H14872 ~ % ping its-site.test
PING its-site.test (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.051 ms
这证实了该网站正在路由到与我的配置匹配的正确 IP。
检查虚拟主机
这是通过参考以下方法手动完成的这些文档并仔细检查指导我照做了。我不知道有任何测试可以确认配置是否正常工作,但在阅读了一些有关虚拟主机的指南和文档后,我非常确信配置没有任何问题,问题一定出在其他地方。
检查httpd.conf
这个配置是我默认列出的配置中最长的。因此,这是一个手动过程。我的解决方案是打开httpd-default.conf
一个相邻的配置文件,该文件似乎具有httpd.conf
文件中的默认配置。在 Apache 的 Homebrew 安装中,它位于文件所在的/opt/homebrew/etc/httpd/extra/
位置httpd.conf
。我并排比较了这两个配置,并从我之前的尝试中删除了我的配置。
就我而言,我发现我意外地在文件httpd.conf
和httpd-php.conf
文件中重复了我的 PHP 配置。我删除了所有配置,并再次按照指南进行操作,确保我的Include
和LoadModule
语句放在相同的语句之后。
删除我的配置并更仔细地配置后,我在浏览器中测试了网站,它们都按预期运行。