使用apahe和tomcat在同一服务器上同时托管faceook应用和网站

时间:2018-06-30 23:02:41

标签: facebook apache tomcat ssl virtualhost

我在使用tomcat的服务器上托管了一个Facebook应用程序。我还在用于处理传入请求并基于安全端口(SLL 443)或80(标准HTTP端口)来重定向它们的同一台计算机上具有apache服务器。我只有一个域名是www.myfacebookapp.net。

当我需要将我的应用程序和网站托管在同一服务器上时,问题就开始了。通常,这应该不成问题,但是我的应用程序和网站都必须支持SSL(Facebook强制要求,因为它不接受任何不安全的连接(非https))

下面是我的配置摘要

  1. 我只有一个域名,即www.yarimelma.net
  2. 我拥有仅支持一个域的SSL证书。
  3. 我已经在/var/www/http/public_html/index.html
  4. 下提供了静态网页内容
  5. 我的tomcat实例在8080上运行,我的应用程序路径为www.myfacebookapp.net/myApp
  6. 因此,当我运行我的Facebook应用程序时,它将向URL https://www.myfacebookapp.net/myApp
  7. 发出POST请求
  8. 我已经用虚拟主机配置了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证书的情况下实现这一目标?

我找不到任何这样的配置

  1. 如果请求来自https://www.myfacebookapp.net/myApp *:443->然后重定向到http://127.0.0.1:8080(tomcat到服务器应用)
  2. 如果请求来自https://www.myfacebookapp.net->然后重定向到/ var / www / html / public_html(以投放网页)

Apache文档说我不能为443(https)和同一域定义两个虚拟主机。

基本上,我想将我的Facebook应用程序和网站托管在同一台服务器上,并且都可以通过https进行访问。

有人知道这有什么解决办法吗?

谢谢/

1 个答案:

答案 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>

一些细节:

  • 仅当您的域名不含www时,ServerAlias才有效,否则将其删除。
  • 我希望每个VirtualHost都有单独的日志。它使您可以对LogLevel进行更多控制,如果有很多的话,则更易于调试。
  • 由于为/myapp设置了ProxyPass,因此所有其他请求都将从您的DocumentRoot目录中的静态文件中提供。

仅供参考,您无法在同一域上运行具有SSL的2个VirtualHost的原因是,在之前完成了浏览器与Apache之间的证书协商,因此Apache知道浏览器正在重新启动哪个域。当在端口443上看到请求时,如果找到并使用了该证书,它将首先触发VirtualHost。