使用Apache虚拟主机和mod_proxy,我想访问在Jetty实例的8080端口上可用的Java应用程序(myapp)。
通过在我的Apache虚拟主机配置中使用“ProxyPass / localhost:8080/”,我可以使用www.mydomain.com/myapp访问在Jetty中运行的应用程序,但我希望从www.mydomain.com访问该应用程序。
尝试使用“ProxyPass / localhost:8080/myapp”,由于请求变为www.mydomain.com/myappmyapp/,因此无法找到该应用程序。
然后尝试使用:
通过在我的Apache虚拟主机配置中使用“ProxyPass / localhost:8080/”,我可以使用www.mydomain.com/myapp访问在Jetty中运行的应用程序,但我希望从www.mydomain.com访问该应用程序。
尝试使用“ProxyPass / localhost:8080/myapp”,由于请求变为www.mydomain.com/myappmyapp/,因此无法找到该应用程序。
然后尝试使用:
<Location />
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
我可以访问应用程序,但仅限于第一个请求。随后的请求变成了www.mydomain.com/myappmyapp/。
在多次阅读wiki.eclipse.org/Jetty/Tutorial/Apache和apache mod_proxy文档后,我唯一成功使用www.mydomain.com正确访问应用程序的方法是使用以下配置:
<Location /myapp/>
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
<Location />
ProxyPass localhost:8080/myapp/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
所以请求在这两种情况下都被转发到jetty应用程序。
我对apache和jetty非常陌生,但我相信有更好、更优雅的方法来实现同样的结果。 事实上,apache会抱怨说:
[warn] worker localhost:8080/myapp/ already used by another worker