【问题标题】:Hosting both faceook app and website on same server with apahe and tomcat使用 apache 和 tomcat 在同一台服务器上托管 facebook 应用程序和网站
【发布时间】:2023-04-10 13:32:05
【问题描述】:

我有一个使用 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 访问。

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

谢谢/

【问题讨论】:

    标签: facebook apache tomcat ssl virtualhost


    【解决方案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>
    

    一些细节:

    • ServerAlias 仅在没有 www 的域存在时才有效,否则将其删除。
    • 我喜欢为每个虚拟主机分开日志。它使您可以更好地控制 LogLevel,如果您有很多,则更容易调试。
    • 由于 ProxyPass 是为 /myapp 设置的,所有其他请求都将通过 DocumentRoot 目录中的静态文件提供服务。

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

    【讨论】:

    • 感谢您的回复。这是一个很好的解决方案。但是,当我按照您的建议进行配置时,ProxyPass /myapp/ 127.0.0.1:8080 它会将我定向到默认的 tomcat 页面(根)而不是 /myapp。我不确定它在定义之前是如何工作的; ProxyPass / 127.0.0.1:8080 对此有何建议?非常感谢
    • 您可以到ProxyPass /myapp/ 127.0.0.1:8080/myapp/
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2010-10-29
    • 1970-01-01
    • 2012-07-30
    • 2020-06-24
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多