在 AWS EC2 机器上,在我的/etc/httpd/conf/httpd.conf
文件中我有以下服务器配置:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.example.com
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/html/zf2-tutorial/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
它在处理“www.example.com”流量方面做得非常出色,当我请求“www.example.com/Workstream”时,我得到了位于的应用程序/var/www/html/Workstream
。
因此,我对自己感觉很好,我决定要更花哨一些,并拥有 Web 服务器路由”工作流.example.com”流量/var/www/html/Workstream
(以下Apache VirtualHost 文档和例子)。
因此,我获得了相关 A 记录的 CNAME 别名——完成,工作正常,很棒。然后,我将目光投向 httpd.conf 文件,将其添加到<VirtualHost>
现有文件的后面:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName workstream.example.com
DocumentRoot /var/www/html/Workstream
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
我保存了编辑,然后重启了 apache(sudo /usr/sbin/apachectl restart
——不知道为什么我的 apache 和其他人不一样),用浏览器打开“workstream.example.com”,然后...得到了 的内容/var/www/html
。重启后返回了以下警告:
[警告]默认VirtualHost 在 80 端口上重叠,第一个优先
我是个 Linux 菜鸟,这很痛苦。我做错了什么?我编辑的 httpd.conf 是否正确(使用 find / -xdev 2>/dev/null -name "httpd.conf"
我看到在 处还有另一个 httpd.conf /opt/railo/sys/httpd.conf
)?ServerName 是否需要与我尚未设置的内容相对应?我的语法是否不正确?
其结果sudo /usr/sbin/apachectl -S
是:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server www.example.com (/etc/httpd/conf/httpd.conf:1005)
port 80 namevhost www.example.com (/etc/httpd/conf/httpd.conf:1005)
port 80 namevhost workstream.example.com (/etc/httpd/conf/httpd.conf:1020)
Syntax OK
答案1
您有NameVirtualHost *:80
(见“NameVirtualHost 指令“) 指令是否在您的配置中?如果没有,那么它将被视为基于 IP 的虚拟主机,从而忽略Host
浏览器发送的标头。
答案2
指令NameVirtualHost *:80
应该是您消除该错误所需要的。Apachectl 发现了它,所以我怀疑 Apache 没有正确重新加载。...不是那个家伙...但你试过了吗重启?
...
...
另一种方法是杀死列出的所有 httpd pid ps -ef
,然后启动?
答案3
如果所有请求都由一个虚拟主机缓存,则可能是您缺少默认虚拟主机http://httpd.apache.org/docs/2.2/vhosts/examples.html
<VirtualHost _default_:80>
DocumentRoot /var/www/html
</VirtualHost>