我目前有三个 WordPress 网站托管在 Apache 上,并使用虚拟主机文件将正确的域指向正确的 DocumentRoot。Ghost (node.js) 刚刚推出,我想对它进行修改,并在我的一个备用域上试用一下。我对转移到 nginx 并不感兴趣,所以我试图通过 mod_proxy 让 Ghost 在 Apache 上运行。我设法让 Ghost 在我的备用域上运行,但我认为我的虚拟主机文件有问题,因为我的所有其他域也开始指向 Ghost。这里有两个虚拟主机文件,一个用于我的主要 WordPress 网站,运行良好,另一个用于 Ghost。域已删除并替换为 DOMAIN 和 DOMAIN2。
领域
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName DOMAIN.com
ServerAlias www.DOMAIN.com
DocumentRoot /var/www/DOMAIN.com/public_html
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/DOMAIN.com/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
域2
<VirtualHost IP:80>
ServerAdmin EMAIL
ServerName DOMAIN2.com
ServerAlias www.DOMAIN2.com
ProxyPreserveHost on
ProxyPass / http://IP:2368/
</VirtualHost>
我感觉虚拟主机或 mod_proxy 的使用不太正确,而且我尝试了很多次后,Google-fu 也让我失望了。有什么好主意吗?谢谢!
答案1
您尝试在 IP 地址上混合使用基于名称和基于 IP 的虚拟托管。这几乎不会产生您期望的结果。
来自文档:
现在,当请求到达时,服务器将首先检查它是否正在使用与 NameVirtualHost 匹配的 IP 地址。如果是,它将查看具有匹配 IP 地址的每个部分,并尝试找到 ServerName 或 ServerAlias 与请求的主机名匹配的部分。如果找到一个,它将使用该服务器的配置。如果未找到匹配的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。
因此,<VirtualHost *:80>
对于块中定义的 IP 地址发出的任何请求<VirtualHost IP:80>
,块中的任何虚拟主机都会被完全忽略,并且它会为所有请求提供服务。
您可以通过对给定 IP 地址上的所有虚拟主机一致使用基于名称或基于 IP 的虚拟托管来解决此问题。