在 apache http 服务器上设置 mod_proxy

Posted

技术标签:

【中文标题】在 apache http 服务器上设置 mod_proxy【英文标题】:Setup mod_proxy on apache http server 【发布时间】:2013-07-02 18:31:42 【问题描述】:

我想使用 apache web 服务器从我的 tomcat 服务器反向代理 web 服务。我已经修改了 httpd.conf

LoadModule proxy_module modules/mod_proxy.so

<Directory />
    AllowOverride none
    Require all denied
</Directory>

ProxyPass         /ROOT  http://localhost:8080/ROOT
ProxyPassReverse  /ROOT  http://localhost:8080/ROOT

我的 Tomcat 服务器在 8080 端口上运行,现在当我运行 localhost/ROOT 时,我收到错误 500 internal server error。

error_log 中的最后一个条目是:

[Thu Jul 04 14:17:00.097359 2013] [proxy:warn] [pid 18980:tid 4476780544] [client 127.0.0.1:50525] AH01144:没有协议处理程序对 URL /ROOT 有效。如果您使用的是 mod_proxy 的 DSO 版本,请确保代理子模块包含在使用 LoadModule 的配置中。 access_log 中的最后一个条目是: 127.0.0.1 - - [04/Jul/2013:14:17:00 -0400]“GET /ROOT HTTP/1.1”500 528

知道我在这里做错了什么吗?

【问题讨论】:

ProxyPassReverse localhost:8080/ROOT /ROOT logs\access.log 中有任何日志吗? 嘿,那没用,这就是 httpd.conf 的样子 LoadModule proxy_module modules/mod_proxy.so AllowOverride none Require all denied ProxyPass /ROOT localhost:8080 /ROOT ProxyPassReverse localhost:8080/ROOT /ROOT 另见superuser.com/questions/439054/… 另见serverfault.com/questions/242650/… 【参考方案1】:

所以花了一些时间,但我想出了办法。还有一个模块需要加载。这就是 httpd.conf 的样子

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<Directory />
    AllowOverride none
    Require all denied
</Directory>

ProxyPass         /ROOT  http://localhost:8080/ROOT
ProxyPassReverse  /ROOT  http://localhost:8080/ROOT

这肯定有效。 :)

【讨论】:

sudo a2enmod proxysudo a2enmod proxy_httpsudo service apache2 restart 这个 proxy_http 是必需的! 来自我使用 mod_proxy 和 mod_proxy_ajp 多年的世界,您需要在非 java 配置中将 ajp 替换为 http 模块。线索是 Apache 日志中的这个错误:AH01144: No protocol handler was valid for the URL【参考方案2】:

由于容易忽略,请关注@muka的评论:

sudo a2enmod proxy  
sudo a2enmod proxy_http  
sudo service apache2 restart

确保启用proxyproxy_http 两个模块!

【讨论】:

^这让我摆脱了 20 小时的痛苦。谢谢!【参考方案3】:

除了其他很好的答案之外,如果您要代理到 https 端点,您需要启用 mod_ssl 并将 SSLProxyEngine on 添加到您的虚拟主机

【讨论】:

以上是关于在 apache http 服务器上设置 mod_proxy的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache 和 mod_wsgi 在 Centos 上设置 Django

带有 mod24_ssl 的 Apache httpd24 不会从 http 重定向到 https

如何在CentOS 7 Apache设置mod

如何将 mod_rewrite 与 Apache -> mod_jk -> tomcat 设置一起使用?

使用 mod_wsgi 在 apache 上设置 Django

如何在 mod_proxy 设置下引用 Apache 的 http.conf 中的环境变量