如何配置我的 httpd rewrite/proxy 以将 app1.example.com:443 定向到 localhost:8080 并将 app2.example.com:443 定向到 localhost:8081?

如何配置我的 httpd rewrite/proxy 以将 app1.example.com:443 定向到 localhost:8080 并将 app2.example.com:443 定向到 localhost:8081?

我有两个 Tomcat 实例,一个运行在端口 8080 上,另一个运行在 8081 上。这两个实例都部署了一个名为 app.war 的 Web 应用程序,但它们不仅由不同的端口分隔,而且由不同的数据存储分隔。然而,它们都运行在同一个物理机上。

我们组织中的防火墙规则指定我只能通过端口 443 提供 HTTPS。 80、8080 或 8081 上不能提供 HTTP 或 HTTPS。

物理机箱运行 RHEL5,在 eth0 上运行单个 IP。DNS 设置为将 app1.example.com 和 app2.example.com 映射到机箱。

如何配置我的 httpd rewrite/proxy 以将 app1.example.com:443 定向到 localhost:8080 并将 app2.example.com:443 定向到 localhost:8081?

编辑

这是我尝试过的...

LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
ProxyRequests Off
<VirtualHost *:443>
     ServerName app1.example.com
     SSLProxyEngine On
     SSlProxyMachineCertificateFile /etc/httpd/cert/10year.pem
     SSLVerifyClient Off
     <Proxy *>
          Order deny,allow
          Allow from all
     </Proxy>
     ProxyPass / https://app.example.com:   /
     ProxyPassReverse / https://app.example.com:8080/
     ProxyPassReverseCookieDomain app.example.com app1.example.com
     <Location />
          Order allow,deny
          Allow from all
     </Location>
</VirtualHost>
<VirtualHost *:443>
     ServerName app2.example.com
     SSLProxyEngine On
     SSlProxyMachineCertificateFile /etc/httpd/cert/10year.pem
     SSLVerifyClient Off
     <Proxy *>
          Order deny,allow
          Allow from all
     </Proxy>
     ProxyPass / https://app.example.com:8081/
     ProxyPassReverse / https://app.example.com:8081/
     ProxyPassReverseCookieDomain app.example.com app2.example.com
     <Location />
          Order allow,deny
          Allow from all
     </Location>
</VirtualHost>

...当我尝试启动它时出现错误...

$ service httpd start
Starting httpd: [Mon Oct 21 11:18:43 2013] [warn] module ssl_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address [::]:443
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:443
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

答案1

此行似乎缺少端口号。这是拼写错误吗?

ProxyPass / https://app.example.com:   /

另外,您可能还应该让 Apache 处理 SSL 并以 http(或 ajp)的形式代理到 Tomcat。您可以使用 localhost 作为服务器名称,例如:

ProxyPass / http://localhost:8080/

答案2

错误消息的第一部分似乎表明端口 433 上已有一些程序在运行。第二部分似乎表明您没有以 root 身份执行“service”命令……

做一个

sudo service httpd restart

这样,您就可以确定您是 root 用户,并且您正在停止,然后启动 apache。

您的 httpd.conf 看起来不错。但是,我会将您的 tomcat 实例配置为使用 http,而不是 https,因为当流量停留在主机上时无需加密。此外,https 代理在 apache 上无法开箱即用。我还将为您的实例禁用默认的 ssl 虚拟主机。这应该可以消除您尝试加载 ssl 模块两次的警告。

相关内容