在 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
中的最后一个条目是:
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所以花了一些时间,但我想出了办法。还有一个模块需要加载。这就是 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 proxy
sudo a2enmod proxy_http
sudo 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
确保启用proxy
和proxy_http
两个模块!
【讨论】:
^这让我摆脱了 20 小时的痛苦。谢谢!【参考方案3】:除了其他很好的答案之外,如果您要代理到 https 端点,您需要启用 mod_ssl 并将 SSLProxyEngine on
添加到您的虚拟主机
【讨论】:
以上是关于在 apache http 服务器上设置 mod_proxy的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache 和 mod_wsgi 在 Centos 上设置 Django
带有 mod24_ssl 的 Apache httpd24 不会从 http 重定向到 https
如何将 mod_rewrite 与 Apache -> mod_jk -> tomcat 设置一起使用?