我发现了一些类似的问题,但似乎没有一个能够完全描述我的情况,因此如果有重复的话,请提前道歉。
我在 Ubuntu 16.04 的 AWS 实例上运行 apache2,但一个特定的子域未正确重定向。
如果我在浏览器中输入“rebecca.example.com”,则只会显示默认的 Ubuntu“Apache works”页面。但是,如果我在浏览器中输入“intranet.example.com”,则会重定向到https://rebecca.example.com正如我所料。我认为这可能是由于 ServerName 与 ServerAlias 造成的,但我尝试切换它们并重新启动 apache,发现 rebecca 子域仍然无法重定向。此外,这种情况大约一周前才开始出现,并且只影响这一个部署(同一服务器上同一配置文件内和其他配置文件中的其他部署均不受影响)。据我所知,DNS 没有任何变化。apachectl configtest
返回“语法正常”。
下面是我的 conf 文件的一个示例(我隐藏了 IP/路径,但除此之外,这是一个准确的表示)
<Directory "/var/www/github.com/org/repo">
Require all denied
Require ip 127.0.0.1
Require ip XX.XXX.XXX.XXX/XX
</Directory>
<VirtualHost *:80>
ServerName intranet.example.com
Redirect permanent / https://rebecca.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName intranet.example.com
SetEnv API_CREDENTIALS /path/to/credentials/api.json
SetEnv JWT_SECRET superSECRET
DocumentRoot "/var/www/github.com/org/repo/html"
SSLEngine on
SSLCertificateFile "/path/to/certificate.crt"
SSLCertificateKeyFile "/path/to/key.key"
SSLCertificateChainFile "/path/to/chain.ca-bundle"
</VirtualHost>
<VirtualHost *:80>
ServerName rebecca.example.com
Redirect permanent / https://rebecca.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName rebecca.example.com
SetEnv API_CREDENTIALS /path/to/credentials/api.json
SetEnv JWT_SECRET superSECRET
</VirtualHost>
DocumentRoot "/var/www/github.com/org/repo/html"
SSLEngine on
SSLCertificateFile "/path/to/certificate.crt"
SSLCertificateKeyFile "/path/to/key.key"
SSLCertificateChainFile "/path/to/chain.ca-bundle"
</VirtualHost>
简而言之,我的问题是为什么这可能只发生在一个子域上,我该怎么做才能排除故障/修复它?
答案1
这很奇怪。要尝试的事情:
- 检查 rebecca.example.com 是否解析为与 intranet.example.com 相同的地址。
- 为 rebecca.example.com 提供自己的 VirtualHost,以隔离来自 intranet.example.com 的任何问题。
- 使用mod_info检查配置是否符合您的预期。
- 查找
LogLevel
并检查日志以获取更多信息。
然后重新加载配置,清除浏览器缓存(浏览器缓存重定向)并重试。