在 Apache HTTP 服务器上设置 mod_proxy

62

我想使用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内部服务器错误。

最后一条error_log记录如下:

[Thu Jul 04 14:17:00.097359 2013] [proxy:warn] [pid 18980:tid 4476780544] [client 127.0.0.1:50525] AH01144: No protocol handler was valid for the URL /ROOT. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
access_log的最后一条记录是:
127.0.0.1 - - [04/Jul/2013:14:17:00 -0400] "GET /ROOT HTTP/1.1" 500 528

这里有什么我做错了的想法吗?


ProxyPassReverse http://localhost:8080/ROOT /ROOT反向代理 http://localhost:8080/ROOT /ROOT - Anantha Sharma
日志\access.log 中有任何日志吗? - aldux
嘿,那行不通,这是 httpd.conf 的样子 LoadModule proxy_module modules/mod_proxy.so<Directory /> AllowOverride none Require all denied </Directory> ProxyPass /ROOT localhost:8080/ROOT
ProxyPassReverse localhost:8080/ROOT /ROOT
- user1386101
请参见http://superuser.com/questions/439054/apache-reverse-proxy-no-protocol-handler。 - Raedwald
请参考 http://serverfault.com/questions/242650/setting-up-a-basic-mod-proxy-virtual-host - Raedwald
3个回答

99

所以花了一些时间,但我找到了解决方法。还需要加载一个模块。这是 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

这肯定会起作用。 :)


50
sudo a2enmod proxy:启用Proxy模块 sudo a2enmod proxy_http:启用HTTP代理模块 sudo service apache2 restart:重启Apache服务器 - lcapra
10
需要使用此代理HTTP! - dardo
来自一个使用mod_proxy和mod_proxy_ajp多年的世界,你需要在非Java配置中用http模块替换ajp。提示是Apache日志中的此错误:AH01144:没有协议处理程序适用于URL。 - ed209

69

由于很容易被忽视,注意@muka的评论:

sudo a2enmod proxy  
sudo a2enmod proxy_http  
sudo service apache2 restart

请确保同时启用了proxyproxy_http这两个模块!


17

除了其他优秀的回答之外,如果您要代理到一个https端点,您需要启用mod_ssl并在您的vhost中添加SSLProxyEngine on


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接