如何通过Nginx实现HTTPS下SurrealDB的安全WebSocket连接?
无法通过HTTPS/WSS连接SurrealDB后端问题排查
技术栈
- Nginx:提供Web内容并反向代理默认端口(:8000)的SurrealDB实例
- SurrealDB:网站使用的数据库方案(目前是我最喜欢的数据库方案之一……前提是它能正常运行😋)
- React + Next.js:网站主要前端方案
- Cloudflare:DNS路由与代理服务
当前Nginx配置
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket { server 127.0.0.1:4321; } sendfile on; keepalive_timeout 65; # HTTP server server { listen 443 ssl; server_name [...].com; ssl_certificate C:\Certbot\live\[...].com\fullchain.pem; ssl_certificate_key C:\Certbot\live\[...].com\privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # Secure WebWocket (WSS) server server { listen 443; server_name dev.db.[...].com; ssl_certificate C:\Certbot\live\[...].com\fullchain.pem; ssl_certificate_key C:\Certbot\live\[...].com\privkey.pem; location / { proxy_set_header Host $host; 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_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_http_version 1.1; proxy_pass http://websocket; proxy_redirect off; proxy_pass_request_headers on; } } }
Cloudflare配置
主域及所有子域的A记录均指向同一服务器IP,且已启用代理模式,流量全部转发至该服务器。
已尝试的解决方案
- 为子域和主域分别通过Certbot颁发独立SSL证书
- 为两个域共享同一SSL证书(通过Certbot)
- 将
proxy_pass指向upstream节点或直接使用127.0.0.1:8000 - 确保
proxy_http_version设置为1.1,proxy_set_header Upgrade设置为$http_upgrade或upgrade - 在listen指令中添加/删除
ssl后缀,同时监听443和80端口 - 修改
server_name为其他值,未解决问题 - 端口转发8000、443、80和8080端口
- 为上述端口及3000端口(Next.js实例)添加TCP/UDP入站/出站防火墙规则
- 修改SurrealDB的
--bind参数调整地址和端口绑定,尚未尝试--addr标志(不清楚正确用法) - 通过本地网络和外部WSS端口测试工具连接,均失败
- 调整Nginx配置,用
location /ws替代独立的server指令,未成功
错误现象
无论从何种介质尝试连接,均出现错误:WebSocket连接到wss://dev.db.censored.com/失败
求助
有没有什么排查方向或配置修正建议?我是不是遗漏了什么关键配置?
(注:示例中的[...]为屏蔽的域名,非实际字符)
内容的提问来源于stack exchange,提问作者Z8MB1E
相关产品推荐
相关产品推荐

