【发布时间】:2018-12-12 18:42:39
【问题描述】:
我已经能够找到有关 nginx、node、ssl 和 websockets 的各种组合的指南,但从来没有一起找到,也从来没有在单个服务器上。
最终,这就是我所追求的,我不确定它是否可能:
- 单服务器(Ubuntu 14.04)
- 强制 HTTPS(浏览到 http://site 转发到 https://)
- 节点应用托管在 localhost:3000
- 节点应用使用网络套接字
- 它是一个单页的 React 应用程序,根本没有路由,所以我不需要路由。我再说一遍,我只托管一个没有任何导航的页面。
使用以下配置,除了 websockets 之外,我的一切都正常工作 - 如果我直接浏览到节点服务器并且不使用 nginx(浏览到 http://my.domain:3000),客户端会抛出一个不会发生的错误:
bundle.js:26 WebSocket connection to 'wss://<my domain>/socket.io/?EIO=3&transport=websocket&sid=x1uQtRzF3gYYEvfIAAAi' failed: Error during WebSocket handshake: Unexpected response code: 400
server {
listen 80;
return 301 https://my/domain$request_uri;
}
server {
listen 443 ssl;
listen [::]:443;
ssl_certificate /path/cert.crt;
ssl_certificate_key /path/key.key;
ssl_session_cache shared:SSL:10m;
server_name blaze.chat;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_redirect http://localhost:3000 https://my.domain;
}
}
【问题讨论】:
标签: node.js ssl nginx websocket socket.io