因此,我目前在一台机器上运行了一个 glassfish 3.1 服务器和一个 apache 2.2 服务器。但是,我正在尝试找出将一些流量通过 apache 服务器路由到 glassfish 服务器的方法,以便隐藏非标准端口 8080、8181。我还在 apache 服务器上提供静态内容。我进行了一些搜索,并阅读了几个讨论如何执行此操作的示例,但是我对 apache 还很陌生,我不了解虚拟主机和 mod_proxy 的内容。任何帮助理解这些内容以及如何完成我正在尝试做的事情都将非常有用。
编辑
根据 Shane 的示例,我尝试了以下操作。
<VirtualHost *:80>
ServerName forum.mydomain.com
# any logging config, etc, that you need
ProxyPass / http://127.0.0.1:8080/forum/
ProxyPassReverse / http://127.0.0.1:8080/forum/
</VirtualHost>
但现在我的所有流量都将http://127.0.0.1:8080/论坛/出于某种原因,所有图片都丢失了。让我更好地解释一下我的情况。我有一个提供静态页面的 apache 服务器,这些页面可以从 mydomain.com 访问。然后我有一个论坛,它作为 web 应用程序在我的 glassfish 服务器上运行,它们在 mydomain.com:8080/forum/ 上提供服务,我希望让 forum.mydomain.com 转到 mydomain.com:8080/forum/,但对用户隐藏端口 8080。让我知道你的想法。
编辑第 2 部分
因此,由于我上次的尝试没有成功,我决定尝试 Shane 示例的另一种变体,因此我尝试了以下步骤。
<VirtualHost *:80>
ServerName mydomain.com
ServerAlias subdomain.mydomain.com
DocumentRoot "/usr/local/apache/htdocs"
<Location /forum>
ProxyPass http://127.0.0.1:8080/forum/
ProxyPassReverse http://127.0.0.1:8080/forum/
</Location>
</VirtualHost>
但这也不起作用,现在如果我点击 mydomain.com,它会带我到 mydomain.com//forums/list.page,但这是一个 404 错误(我认为这很奇怪,因为它显然到达了 glassfish 服务器,因为它重新路由到 list.page)。但是,如果我转到 subdomain.mydomain.com,它会带我到我的正常静态网页。我觉得我必须接近,但我不知道哪里出了问题。在这个例子中,我希望 mydomain.com 和 subdomain.mydomain.com 会带我到我的静态页面,而 mydomain.com/forum/ 会带我到 glassfish 上的论坛应用程序。
编辑第 3 部分最终版?
所以我终于得到了我想要的路由,但由于某种原因,论坛缺少所有图片。我最终做了以下事情。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.mydomain.com
ServerAlias subdomain.mydomain.com mydomain.com
DocumentRoot "/usr/local/apache/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName forum.mydomain.com
# any logging config, etc, that you need
ProxyPass / http://127.0.0.1:8080/forum/
ProxyPassReverse / http://127.0.0.1:8080/forum/
</VirtualHost>
现在我只需要解决图像问题……
答案1
基本上,这些ProxyPass
指令可以向来自不同 HTTP(或 AJP)服务器的内容位置提供请求。
这是一个带有注释的示例配置,可能有助于澄清:
# We'll call this your existing vhost:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /path/to/www/
# other existing config
# Let's say you want to serve http://example.com/glassfishapp from the 8080 listener:
<Location /glassfishapp>
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
</Location>
</VirtualHost>
# Now, let's say there's a whole domain you want to serve from the 8181 listener:
<VirtualHost *:80>
ServerName glass.example.com
# any logging config, etc, that you need
ProxyPass / http://127.0.0.1:8181/
ProxyPassReverse / http://127.0.0.1:8181/
</VirtualHost>