使用 apache 和 tomcat 在同一台服务器上托管 facebook 应用程序和网站
Hosting both faceook app and website on same server with apahe and tomcat
我有一个 facebook 应用程序托管在使用 tomcat 的服务器上。我还在同一台机器上安装了 apache 服务器,我在其中处理传入请求并根据它是来自安全端口(SLL 443)还是 80(标准 HTTP 端口)来重定向它们。我只有一个域名 www.myfacebookapp.net。
当我需要在同一台服务器上托管我的应用程序和网站时,问题就出现了。通常这应该不是问题,但是我的应用程序和网站都必须支持 SSL(Facebook 强制要求它,因为它不接受任何不安全的连接(不是 https))
以下是我的配置摘要
- 我只有一个域名www.yarimelma.net
- 我有只支持一个域的 SSL 证书。
- 我在 /var/www/http/public_html/index.html
下提供了我的静态网页内容
- 我的 tomcat 实例 运行s 在 8080 上,我的应用程序路径是 www.myfacebookapp.net/myApp
- 所以当我 运行 我的 facebook 应用程序时,它向 URL 发出 POST 请求:https://www.myfacebookapp.net/myApp
我已经使用虚拟主机配置了我的 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 应用程序和网页上工作正常 (http://www.myfacebookapp.net) 但是,我还应该支持我的网页支持 https 连接。不幸的是,我无法使用此配置实现此目的。所以我想做什么,
- 通过 https 访问网页 https://www.myfacebookapp.net
- 此外,当 URL https://www.myfacebookapp.net/myApp(facebook 调用以呈现 facebook 应用程序 iframe)访问安全端口时,保持 tomcat 重定向
是否可以在没有任何额外域名和 SSL 证书的情况下实现这一点?
我找不到这样的配置,
- 如果请求来自 https://www.myfacebookapp.net/myApp *:443 -> 然后重定向到 http://127.0.0.1:8080 (tomcat 到服务器应用)
- 如果请求来自 https://www.myfacebookapp.net -> 然后重定向到 /var/www/html/public_html(提供网页)
Apache 文档说我无法为 443 (https) 和同一域定义两个虚拟主机。
基本上,我想在同一台服务器上托管我的 Facebook 应用程序和网站,并且都应该可以通过 https 访问。
有人知道这方面的解决方案吗?
谢谢/
你只需要一个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 的域存在时才有效,否则将其删除。
- 我喜欢将每个 VirtualHost 的日志分开。它使您可以更好地控制 LogLevel,如果您有很多,则更容易调试。
- 由于为
/myapp
设置了 ProxyPass,所有其他请求将从您的 DocumentRoot 目录中的静态文件提供。
仅供参考,您不能在同一域上使用 SSL 运行 2 个 VirtualHosts 的原因是因为浏览器和 Apache 之间的证书协商在 之前 Apache 知道哪个域浏览器正在请求。当它在端口 443 上看到请求时,如果找到并使用该证书,它将首先使用 VirtualHost。
我有一个 facebook 应用程序托管在使用 tomcat 的服务器上。我还在同一台机器上安装了 apache 服务器,我在其中处理传入请求并根据它是来自安全端口(SLL 443)还是 80(标准 HTTP 端口)来重定向它们。我只有一个域名 www.myfacebookapp.net。
当我需要在同一台服务器上托管我的应用程序和网站时,问题就出现了。通常这应该不是问题,但是我的应用程序和网站都必须支持 SSL(Facebook 强制要求它,因为它不接受任何不安全的连接(不是 https))
以下是我的配置摘要
- 我只有一个域名www.yarimelma.net
- 我有只支持一个域的 SSL 证书。
- 我在 /var/www/http/public_html/index.html 下提供了我的静态网页内容
- 我的 tomcat 实例 运行s 在 8080 上,我的应用程序路径是 www.myfacebookapp.net/myApp
- 所以当我 运行 我的 facebook 应用程序时,它向 URL 发出 POST 请求:https://www.myfacebookapp.net/myApp
我已经使用虚拟主机配置了我的 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 应用程序和网页上工作正常 (http://www.myfacebookapp.net) 但是,我还应该支持我的网页支持 https 连接。不幸的是,我无法使用此配置实现此目的。所以我想做什么,
- 通过 https 访问网页 https://www.myfacebookapp.net
- 此外,当 URL https://www.myfacebookapp.net/myApp(facebook 调用以呈现 facebook 应用程序 iframe)访问安全端口时,保持 tomcat 重定向
是否可以在没有任何额外域名和 SSL 证书的情况下实现这一点?
我找不到这样的配置,
- 如果请求来自 https://www.myfacebookapp.net/myApp *:443 -> 然后重定向到 http://127.0.0.1:8080 (tomcat 到服务器应用)
- 如果请求来自 https://www.myfacebookapp.net -> 然后重定向到 /var/www/html/public_html(提供网页)
Apache 文档说我无法为 443 (https) 和同一域定义两个虚拟主机。
基本上,我想在同一台服务器上托管我的 Facebook 应用程序和网站,并且都应该可以通过 https 访问。
有人知道这方面的解决方案吗?
谢谢/
你只需要一个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 的域存在时才有效,否则将其删除。
- 我喜欢将每个 VirtualHost 的日志分开。它使您可以更好地控制 LogLevel,如果您有很多,则更容易调试。
- 由于为
/myapp
设置了 ProxyPass,所有其他请求将从您的 DocumentRoot 目录中的静态文件提供。
仅供参考,您不能在同一域上使用 SSL 运行 2 个 VirtualHosts 的原因是因为浏览器和 Apache 之间的证书协商在 之前 Apache 知道哪个域浏览器正在请求。当它在端口 443 上看到请求时,如果找到并使用该证书,它将首先使用 VirtualHost。