Apache VirtualHost 不匹配

Apache VirtualHost 不匹配

我有一个 apache web 服务器实例,我需要以这种方式映射 URL:

  1. 网址来自b2b.域名.eu必须代理到另一个服务器 10.1.0.100[有用]

  2. 网址来自b2b.domain.eu/api必须代理到 tomcat api 应用程序[有用]

  3. 网址来自b2b.domain.eu/解码器必须代理到 tomcat 解码器应用程序[有用]

  4. 对于 Url /App1/Shop/home.aspx,我们需要执行输出过滤器[有用]

  5. www.域名.euweb.域名.eu必须提供 wordpress 网站[它不起作用]-> 相反,应用程序转到似乎是默认的 App1

下面是我的实际配置。我尝试以不同的方式更改它,更改顺序等,但都没有成功。有人能帮助我了解如何达到预期的行为吗?

提前致谢

<VirtualHost *:80>
ServerName 10.1.0.101
ServerAlias b2b.domain.eu

ProxyRequests Off
ProxyPreserveHost On

ExtFilterDefine filter1 mode=output \
cmd="/var/www/cgi-bin/filter.pl /tmp/filter.out"

#Root: forward to App1 [OK]
<LocationMatch "^/">
   ProxyPassMatch  http://10.1.0.100/App1
   ProxyPassReverse  http://10.1.0.100/App1
</LocationMatch>

#API: Forward to tomcat (api) [OK]
<LocationMatch "^/api/(.*)">
   ProxyPassMatch   http://localhost:8080/api/$1
   ProxyPassReverse http://localhost:8080/api/$1
</LocationMatch>

#Decoder: Forward to tomcat (decoder) [OK]
<LocationMatch "^/decoder(.*)">
   ProxyPassMatch   http://localhost:8080/decoder$1
   ProxyPassReverse http://localhost:8080/decoder$1
</LocationMatch>

#App1 with filter execution [OK]
<LocationMatch "^/App1/Shop/home.aspx(.*)">
   ProxyPassMatch   
     http://10.1.0.100/App1/Shop/home.aspx$1
   ProxyPassReverse 
   http://10.1.0.100/App1/Shop/home.aspx$1

   SetOutputFilter   filter1
</LocationMatch>

#App1 [OK]
<LocationMatch "^/App1(.*)">
   ProxyPassMatch   http://10.1.0.100/App1$1
   ProxyPassReverse http://10.1.0.100/App1$1
</LocationMatch>

</VirtualHost>

#[KO]
<VirtualHost *:80>
   ServerName 10.1.0.101
   ServerAlias www.domain.eu  web.domain.eu
   DocumentRoot /var/www/html/wordpress
</VirtualHost>

[更新日期 2018/11/28]

我按照 @tom 的建议更改了配置,但这些更改并没有解决问题。也许问题不在于 Apache 配置,而在于我们的 Fortinet 60E,因为我们注意到在文件 C:\Windows\System32\drivers\etc\hosts 中的 Windows 客户端中添加以下行,行为符合预期。

10.1.0.101      web.domain.eu

我们的 DNS 已配置为映射我们的公共 IP。Fortinet 将请求(不带 NAT)转发到 Apache Web 服务器(10.1.0.101),但它似乎删除了一些信息。

答案1

您的两个VirtualHost实例都具有相同的 IP + 端口 + ServerName 组合。这三项必须一起唯一地定义您的虚拟主机。对于基于名称的虚拟托管,IP 地址和端口号将相同,因此您可以使用指令进行区分ServerName。不要将 IP 地址作为ServerName

<VirtualHost 10.1.0.101:80>
  ServerName b2b.domain.eu
  [...]
</VirtualHost>

<VirtualHost 10.1.0.101:80>
  ServerName www.domain.eu
  ServerAlias web.domain.eu
  [...]
</VirtualHost>

另请参阅基于名称的虚拟主机

相关内容