Apache 反向代理配置

Apache 反向代理配置

所以我有一个运行 Apache 2.4.25 的 Debian 9 盒子

我希望 Apache 也能从另一台服务器提供 Web 内容(http://192.168.1.100:8088) 在网络上;我已经设置了 mod_proxy 来执行此操作,但却很难让它正常工作。

这个配置看起来几乎可以正常工作,因为我从正确的服务器获得了一些错误内容,似乎 app1 端点附加到 url 时存在 url 问题?这个端点实际上并不存在于任何地方,只是用于捕获请求。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass /app1 http://192.168.1.100:8088/
    ProxyPassReverse /app1 http://localhost/
</virtualHost>

如果我尝试代理所有请求,这样它可以正常工作,但显然我无法访问本地主机上的任何资源。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ProxyPreserveHost On
    ProxyRequests Off
    <proxy *>
      Order deny,allow
      Allow from all
    </proxy>
    ProxyPass / http://192.168.1.100:8088/
    ProxyPassReverse / http://localhost/
</virtualHost>

我想也许我需要执行某种重写?我对使用 Apache mod_proxy 没有特别的经验。

:-(

答案1

正如评论中提到的,您至少有两个明显的问题:

  1. ProxyPass每个单独语句中的“终止”斜线ProxyPassReverse需要匹配。

  2. ProxyPass并且ProxyPassReverse需要引用同一个主机。

因此,在您的第一个例子中:

ProxyPass /app1 http://192.168.1.100:8088/
ProxyPassReverse /app1 http://localhost/

应该:

ProxyPass /app1 http://192.168.1.100:8088
ProxyPassReverse /app1 http://192.168.1.100:8088

或者:

ProxyPass /app1 http://localhost
ProxyPassReverse /app1 http://localhost

对于您的第二个示例,/出于此处提到的目的,被视为“终止”斜线。所以:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://localhost/

只需匹配主机即可:

ProxyPass / http://192.168.1.100:8088/
ProxyPassReverse / http://192.168.1.100:8088/

或者:

ProxyPass / http://localhost/
ProxyPassReverse / http://localhost/

笔记

  • 也许值得一提的是,Apache 处理其代理的 URL 的方式可能比依赖接收应用程序如何构建其自己的 URL/获得更好的结果。/app1

  • 根据接收应用程序的工作方式,您可能需要代理多个 URL。

  • 如果由于某种原因它们尚未启用,您可能希望启用它们mod_proxy_htmlmod_proxy_httpmod_proxy

相关内容