【问题标题】:Apache 2.2 VirtualHosts and multiple portsApache 2.2 VirtualHosts 和多个端口
【发布时间】:2014-02-11 21:56:54
【问题描述】:

我发现我们的网络服务器出现了一些有趣的行为。

我使用 VirtuaHosts 指令设置了一些 https URL,并将它们放在非标准端口上。我正在使用端口 4443 和 4543。

所以浏览到https://test-domain.com:4443 有效,https://test2-domain.com:4543 也是如此。但是,如果我输入 test-domain2.com:4443 或 test-domain.com:4445 也会通过端口将您带到正确的网页。 (当我测试时,我正在输入完整链接,堆栈溢出不会让我输入超过两个,所以我删除了问题的 https:// 部分)。

基本上,只要您传递一个有效的域,您就可以输入任何一个端口,它会将您带到托管在该端口上的站点。我认为这种行为是不可能的。我想如果我用站点 B 端口键入站点 A 的域,我会返回一个未找到页面或另一个错误页面,而不是我总是被带到站点 B。它解析到端口上托管的任何内容。

如果有人有任何建议或知道我做错了什么,我会很感激答案或帮助。

这里是 Apache 配置... 我确实查看了在线 apache 文档,并尝试使用 NameVirtualHost 和 VirtualHost 的网络服务器 IP 地址进行试验,并产生了相同的行为

NameVirtualHost *:4443

<VirtualHost *:4443>
#SetEnv VHOST "test.domain.com"
ServerName test.domain.com
DocumentRoot /var/www/test/public
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile ssl/test.domain.com.crt
SSLCertificateKeyFile ssl/test.domain.com.key
SSLCertificateChainFile ssl/gd_bundle.crt
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

ErrorLog logs/test-error_log
CustomLog logs/test-access_log common
</VirtualHost>


NameVirtualHost *:4543

<VirtualHost *:4543>
#SetEnv VHOST "test2.domain.com"
ServerName test2.domain.com
DocumentRoot /var/www/test2/public
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile ssl/test2.domain.com.crt
SSLCertificateKeyFile ssl/test2.domain.com.key
SSLCertificateChainFile ssl/gd_bundle.crt
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown

ErrorLog logs/test2-error_log
CustomLog logs/test2-access_log common
</VirtualHost>

跟进,我尝试添加以下部分: 重定向 404 / ErrorDocument 404“没有这样的站点。检查 URL 拼写。我们的主站点是 \ http://test1.domain.com/'>http:/test1.domain.com"

<VirtualHost *:4543>
Redirect 404 /
ErrorDocument 404 "No Such Site.  Check the URL spelling.  Our main site is \
              <a href='http://test2.domain.com/'>http://test2.domain.com"
</VirtualHost>

而 apachectl -S 显示如下:

*:4543                 is a NameVirtualHost
default server test2.domain.com (/etc/httpd/conf.d/test.https.conf:76)
port 4543 namevhost test2.domain.com (/etc/httpd/conf.d/test.https.conf:76)
port 4543 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.https.conf:92)
*:4443                 is a NameVirtualHost
default server test1.domain.com (/etc/httpd/conf.d/test.https.conf:51)
port 4443 namevhost test1.domain.com (/etc/httpd/conf.d/test.https.conf:51)
port 4443 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.https.conf:68)
*:443                  is a NameVirtualHost
default server test.domain.com (/etc/httpd/conf.d/test.https.conf:20)
port 443 namevhost test.domain.com /etc/httpd/conf.d/test.https.conf:20)
port 443 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/ssl.conf:76)
*:80                    is a NameVirtualHost
default server test.domain.com (/etc/httpd/conf.d/test.http.conf:3)
port 80 namevhost test.domain.com (/etc/httpd/conf.d/test.http.conf:3)
port 80 namevhost test1.domain.com (/etc/httpd/conf.d/test.http.conf:8)
port 80 namevhost test2.domain.com (/etc/httpd/conf.d/test.http.conf:13)
port 80 namevhost ip-10-0-1-204.ec2.internal (/etc/httpd/conf.d/test.http.conf:18)
    wild alias *.domain.com

【问题讨论】:

    标签: apache


    【解决方案1】:

    Apache 分两个阶段解析虚拟主机。

    首先,它仅查看 VirtualHost 指令中的接口和端口,找到最匹配的基于 IP 的虚拟主机。

    如果有超过 1 个最佳匹配,当请求可用时,它会从基于 IP 的最佳匹配中挑选最佳的基于名称的匹配。

    每组基于名称的虚拟主机只有 1 个 VH。

    因此,一旦在连接级别选择了基于 IP 的虚拟主机,就无需进行其他选择。它不会跳到另一组 NVH 上。

    【讨论】:

    • 好的,@covener 所以我尝试添加另一个虚拟主机部分来解决这个问题,但它仍然产生相同的结果。 &lt;VirtualHost *:4543&gt; Redirect 404 / ErrorDocument 404 "No Such Site. Check the URL spelling. Our main site is \ &lt;a href='http://test2.domain.com/'&gt;http://test2.domain.com" &lt;/VirtualHost&gt;
    • 您在之前当前添加了它?它是从全局 conf 继承 DocumentRoot 吗? apachectl -S 是否提供线索?
    • 不,我在当前一个之后添加了这些。 apachectl -S 显示如下:
    • 见上面的原始问题帖子,我添加了 apachectl 输出以及我添加的虚拟主机节之一。
    • 好吧,如果你在之后添加它,第一个列出的仍然是默认的。你想要一个新的默认值。在前面加上包罗万象。
    猜你喜欢
    • 2010-11-30
    • 2012-07-19
    • 2018-07-28
    • 2017-06-28
    • 2018-05-25
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多