我有一台运行以下操作的物理服务器:
- Apache(httpd)服务器
- 端口 1234 上的另一个 Web 服务器(为了便于讨论,我们假设为 Tomcat)
我可以将 Apache 服务器配置为 SSL 流量的代理,同时让应用程序服务器完全不知道 SSL 吗?
我的想象是:
- 交通http://myserevr.com/app重定向至https://myserver.com/app
- 交通https://myserver.com/app被代理到应用程序服务器。
- 我的 SSL 证书仅安装在 Apache 服务器上,未安装在应用程序服务器上
- 到 Apache 服务器的其他流量(http://myserver.com/anotherapp)直接由 Apache 服务器提供
实现这一目标的最佳设置是什么?(在 Ubuntu 上,如果这很重要)
答案1
如果 Tomcat 在标准端口 (8080 - HTTP、8009 - AJP) 上运行,请将其添加到您的 Apache 配置中:
<VirtualHost _default_:443>
.......
ProxyRequests Off
ProxyPreserveHost On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location /app>
ProxyPass ajp://localhost:8009/app
ProxyPassReverse ajp://localhost:8009/app
</Location>
#<Location /app>
# ProxyPass http://localhost:8080/app
# ProxyPassReverse http://localhost:8080/app
#</Location>
<Location "/app/WEB-INF/">
deny from all
</Location>
..........
</VirtualHost>
<VirtualHost *:80>
...........
RewriteEngine On
RewriteRule ^/app$ https://%{HTTP_HOST}%{REQUEST_URI} [R]
...........
</VirtualHost>
答案2
看一下mod_proxy对于 Apache,以及如何在“反向代理”模式下使用它。