在反向代理后面打开远程Meteor DDP连接

时间:2015-02-06 00:54:14

标签: nginx meteor

我正在努力使用Meteor的https://siteA.com打开从https://siteB.comDDP.connect()的连接,其中两个服务器都驻留在从http转发到https的nginx反向代理之后。

事情在发展中运作良好。在生产中,当我在siteA的控制台中运行DDP.connect('siteB.com')时,我会收到:

Mixed Content: The page at 'https://siteA.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://siteB.com/sockjs/info?cb=zw6j36l90y'.  This request has been blocked; the content must be served over HTTPS.

在我当前的siteB的nginx配置中,我有以下内容(相关部分,如果需要更多,则为lmk):

server {
  listen 80 default_server;
  location / {
    rewrite ^ https://$server_name$request_uri? permanent;
  }
}

server {
  listen 443 ssl spdy;
  add_header Access-Control-Allow-Origin 'https://siteA.com';
  proxy_pass http://localhost:3000;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-Proto https;
  proxy_set_header X-Nginx-Proxy true;
  proxy_redirect off;
}

我得知它抱怨请求终止于http端点(http://localhost:3000),但我不知道该怎么办。

如果我将siteB的nginx配置更改为proxy_pass https://localhost:3000,则会生成502 Bad Gateway

我在siteB上使用和不使用Meteor的force-ssl包进行了尝试。

这两个网站都没有包含Meteor的browser-policy软件包 - 根据我的阅读默认设置,没有软件包应该允许我按原样连接。

我也试过DDP.connect("ws://siteB.com");,但结果是:

XMLHttpRequest cannot load ws://siteB.com/sockjs/info?cb=9lahswe7_9. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

我应该在不同的端口上听吗?是否有nginx配置设置将此请求列入白名单?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

经过一些初步的谷歌搜索后,我发现了一个小提示: Mixed Content: The page at 'XYZ' was loaded over HTTPS, but requested an insecure over https

...即使它谈论的是样式表而不是XMLHttpRequest,它肯定是相关的