facebook - 使用 apache 和 tomcat 在同一台服务器上托管 facebook 应用程序和网站

标签 facebook apache tomcat ssl virtualhost

我在使用 tomcat 的服务器上托管了一个 facebook 应用程序。我还在同一台机器上安装了 apache 服务器,我在其中处理传入请求并根据它是来自安全端口(SLL 443)还是 80(标准 HTTP 端口)来重定向它们。我只有一个域,它是 www.myfacebookapp.net。

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

下面是我的配置摘要

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

有人知道这方面的解决方案吗?

谢谢/

最佳答案

你只需要一个 VirtualHost 端口 443,并在其中为 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,如果您有很多,则更容易调试。
  • 由于 ProxyPass 是为 /myapp 设置的,所有其他请求都将从您的 DocumentRoot 目录中的静态文件提供。

仅供引用,您不能在同一个域上运行 2 个带有 SSL 的 VirtualHosts 的原因是浏览器和 Apache 之间的证书协商是在 Apache 知道浏览器正在请求哪个域之前完成的。当它在端口 443 上看到请求时,如果找到并使用该证书,它将首先使用 VirtualHost。

关于facebook - 使用 apache 和 tomcat 在同一台服务器上托管 facebook 应用程序和网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119172/

相关文章:

java - 使用 scribe 进行 facebook 身份验证时如何实例化验证程序

facebook - 获取给定 URL 的 Facebook 点赞/分享计数

php - Apache 不会加载 Zend Guard Loader

php - 使用 htaccess 拒绝 ajax 文件访问

java - 仅在 REST API 调用时出现 Spring Boot 404

php - 发布带有youtube嵌入式视频的网站的网址时未显示缩略图

facebook - 如何通过 Api 更改 Facebook FanPage "Tab"图标

php - 迁移和错误: Forbidden You don't have permission to access/on this server

java - 从命令行覆盖 application.properties 文件中的值

java - Spring MVC 上传文件,然后提供下载链接