【问题标题】:wss://my.domain.com/sockjs/362/4q059yw7/websocketwss://my.domain.com/sockjs/362/4q059yw7/websocket
【发布时间】:2018-05-05 22:07:10
【问题描述】:

我需要帮助来解决这个问题。

我正在尝试对域 my.domain.com 实施 ssl

前端是 Angular,后端是 Meteor

我能够正确创建 ssl 证书,并且能够在加载域时获得 Secure https 标签,但由于错误而无法呈现页面

Uncaught TypeError: a._qs.unescape is not a function

来自 .build/dist/bundle/programs/web.browser 中的构建文件

Request URL:https://my.domain.com/5a0c202b90aa3cc1c9414b703c4e1f343fb0dd4e.js?meteor_js_resource=true

以下 websocket 请求将保持等待状态,状态为 101

wss://my.domain.com/sockjs/362/4q059yw7/websocket

我还没有在 Meteor 上编写任何代码来运行它到 https,我正在尝试通过 nginx 处理。 从角度添加 ssl 证书后尝试通过wss://localhost/ 而不是ws://localhost:3000/ 连接到流星

请在下面找到我的 nginx 文件。

events {    
}

http {
  server {
     listen 80;
     listen [::]:80 default_server ipv6only=on;
     server_name  my.domain.com;
     root   /client;
     index  index.html;

     location / {
        rewrite     ^ https://$server_name$request_uri? permanent;
     }
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

 server {
    # Enable HTTP/2
     listen 443 ssl http2;
     listen [::]:443 ssl http2;
     server_name  my.domain.com;

     root   /client;
     index  index.html;
     ssl_certificate /etc/letsencrypt/live/my.domain.com/fullchain.pem; # managed by Certbot
     ssl_certificate_key /etc/letsencrypt/live/my.domain.com/privkey.pem; # managed by Certbot
     ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; # allow websockets
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

    location /api {
        proxy_pass http://localhost:3000;
    }

    location /uploadFile {
        proxy_pass http://localhost:3000;
    }

    error_page   500 502 503 504  /50x.html;
    location = /51x.html {
        root   /client;
    }
  }  
}

任何线索将不胜感激。

【问题讨论】:

  • 所有脚本都加载了吗?感觉好像有一个js文件没有正确加载。调试器在页面加载期间是否显示任何 404?
  • 没有 404 错误消息,但网络选项卡中的 websocket 状态将始终保持为待处理。如果来自 nginx 文件的代理设置,那么我不会收到“未捕获的类型错误:a._qs.unescape 不是函数”错误
  • 我在 nginx 中犯了什么错误吗? Nginx 文件在没有 wws 连接代理设置的情况下工作正常
  • 我对您在这里的 NGINX 规则感到困惑。这是全部吗? Meteor 应该有一个部分,Angular 应该有另一个部分。

标签: javascript angularjs ssl nginx meteor


【解决方案1】:

我发现了我遇到的问题。 问题在 nginx 的下面一行。

 proxy_pass http://localhost:3000;

我通过将其重定向到http://localhost:3000/websocket; 和位置as location /websocket 来修复它

片段如下。

location /websocket {
   proxy_pass http://localhost:3000/websocket;
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade; # allow websockets
   proxy_set_header Connection $connection_upgrade;
   proxy_set_header X-Forwarded-For $remote_addr;
}

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2019-11-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 2021-08-27
    相关资源
    最近更新 更多