我在使用tomcat的服务器上托管了一个Facebook应用程序。我还在用于处理传入请求并基于安全端口(SLL 443)或80(标准HTTP端口)来重定向它们的同一台计算机上具有apache服务器。我只有一个域名是www.myfacebookapp.net。
当我需要将我的应用程序和网站托管在同一服务器上时,问题就开始了。通常,这应该不成问题,但是我的应用程序和网站都必须支持SSL(Facebook强制要求,因为它不接受任何不安全的连接(非https))
下面是我的配置摘要
我已经用虚拟主机配置了apache实例,
VirtualHost1 (*: 80)
ServerName www.myfacebookapp.net
DocumentRoot /var/www/http/public_html/
VirtualHost1 (*: 443) #direct to tomcat
ServerName www.myfacebookapp.net
DocumentRoot /var/www/http/public_html/ ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName www.myfacebookapp.net
SSLEngine on
#other ssl related config
当我从80(http://www.myfacebookapp.net)访问我的网页时,它与我的facebook应用程序以及网页都可以正常工作。但是,我也应该支持我的网页支持https连接。不幸的是,我无法使用此配置来实现此目的。所以我想做的事,
是否可以在没有任何其他域名和SSL证书的情况下实现这一目标?
我找不到任何这样的配置
Apache文档说我不能为443(https)和同一域定义两个虚拟主机。
基本上,我想将我的Facebook应用程序和网站托管在同一台服务器上,并且都可以通过https进行访问。
有人知道这有什么解决办法吗?
谢谢/
答案 0 :(得分:1)
您只需要在端口443上安装一台VirtualHost,并在其中为Tomcat部分进行条件重定向。像这样:
Listen *:443
<VirtualHost *:443>
ServerName www.example.com
ServerAlias example.com
LogLevel debug
ErrorLog "logs/443-error_log"
CustomLog "logs/443-access_log" combined
DocumentRoot /var/www/http/public_html
SSLEngine On
# OTHER SSL RELATED CONFIGURATIONS
ProxyPreserveHost On
ProxyPass /myapp/ http://127.0.0.1:8080/myapp/
ProxyPassReverse /myapp/ http://127.0.0.1:8080/myapp/
</VirtualHost>
一些细节:
/myapp
设置了ProxyPass,因此所有其他请求都将从您的DocumentRoot目录中的静态文件中提供。仅供参考,您无法在同一域上运行具有SSL的2个VirtualHost的原因是,在之前完成了浏览器与Apache之间的证书协商,因此Apache知道浏览器正在重新启动哪个域。当在端口443上看到请求时,如果找到并使用了该证书,它将首先触发VirtualHost。