所有流量都流向虚拟主机

所有流量都流向虚拟主机

我有一个应用程序正在运行http://本地主机:6512虚拟主机定义如下:

<VirtualHost *:80>
        ServerName ldpmarmotta.example.com
        ProxyPassMatch ^/(.*)$ http://localhost:6512/marmotta/$1
</VirtualHost>

我对上述定义有两个问题:

  1. 该服务器的所有流量包括http://example.com正在被引导至 http://本地主机:6512
  2. 对 ldpmarmotta.example.com 的请求被定向到 http://本地主机:6512。我没想到 URL 会改变,但响应返回的是 ldpmarmotta.example.com

答案1

你说: ”我有一个应用程序正在运行http://本地主机:6512“但就你的问题(以及这个答案)而言,最好这样说:

  • 我正在运行一个监听端口 6512 的 HTTP 守护进程;我们把它称为我的守护进程。请注意,不是Apache;它是另一个应用程序;

另外,您说:“[...] 虚拟主机定义如下...”而且,最好还是这样说:

  • 我也运行 Apache,配置为监听端口 80(显然 不是监听端口 6512)并定义单个 VirtualHost。具体来说,VirtualHost 定义如下 [...]

话虽如此(顺便说一句:我是对的吗?如果不是,请添加评论),你说有两个问题。

对于第一个:

该服务器的所有流量包括http://example.com正在被引导至http://本地主机:6512

我会这样说如果主机名example.com解析为运行 Apache 的主机的某个 IP 地址,那么这是一种预期的行为作为:

  • 启动生成的 HTTP 请求“http://example.com” 被 Apache 接收(因为它正在监听相关 IP 地址的 80 端口);
  • 因为有不是明确定义的 VirtualHost 与ServerName example.com....
  • ...Apache 将通过定义的第一个 VirtualHost 来处理请求。并且...
  • 因为第一个虚拟主机是“你的”,所以 HTTP 请求被“代理”到 my_daemon 并且......
  • 这样,my_daemon 将接收 HTTP 请求。

因此,我再一次表示,我没有发现问题。

再次重申,如果我的某些假设有误,请告诉我。


至于你的第二个“问题”,我发现它涵盖了两个不同的点。第一个是:

对 ldpmarmotta.example.com 的请求被定向到 http://本地主机:6512

并且,再次,这在我看来是一种预期的行为,因为这正是您在虚拟主机中配置的。

第二点是:

我没想到 URL 会改变,但响应返回的是 ldpmarmotta.example.com

我不是 100% 确定你到底想描述什么,但是...如果我拿出我的(布满灰尘的)水晶球,我敢打赌你一定遇到了问题代理传递:您有自己的 HTTP 守护程序正在运行(我的守护进程),但您不想将其直接暴露给互联网。因此,您在其前面放置了一个标准 Apache,并且……请 Apache 在互联网和您的守护进程之间来回传递 HTTP 请求。在这种情况下……您只需依靠ProxyPass ProxyPassReverse

就像是:

ProxyPass / http://localhost:6512/marmotta/
ProxyPassReverse / http://localhost:6512/marmotta/

(顺便说一句:您使用了ProxyPassMatch但作为您定义的 REGEX,它匹配......一切,它的行为就像一个标准的 ProxyPass。因此,我建议使用后者,因为它稍微更高效且更易读)。

至于ProxyPass/ProxyPassReverse详细用法....网络它实际上是满的详细的教程/文章,这样……您就可以轻松深入了解细节:-)

嗨嗨。

相关内容