所以我有一个运行 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
正如评论中提到的,您至少有两个明显的问题:
ProxyPass
每个单独语句中的“终止”斜线ProxyPassReverse
需要匹配。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_html
。mod_proxy_http
mod_proxy