我正在尝试解决我一直无法通过 HTTPS/WSS 连接到我的 SurrealDB 后端的问题。当尝试通过 HTTP 或 WS 连接时,一切正常,但添加任何类型的 SSL 似乎都会破坏一切。我当前的堆栈如下所示:
我的 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 地址并被代理。
端口 3000 的代理工作并且 Next.js 实例可以通过 HTTPS 访问,所以我不认为 nginx 本身搞砸了,但我可能是错的。
我已经尝试过各种解决方案,包括以下内容:
为子域和主域颁发单独的 SSL 证书(使用 certbot),
为两个域共享相同的 SSL 证书(使用 certbot),
指向
proxy-pass
upstream
以及直接127.0.0.1:8000
方法,
确保以下内容:
proxy_http_version
设置为 1.1
.proxy_set_header Upgrade
设置为 $http_upgrade
或 upgrade
.同时收听 443 和 80,包括和不包括
ssl
指令上的 listen
后缀。
将
server_name
从dev.db.[...].com
更改为各种其他选项,但没有成功,
端口转发端口8000、443、80、8080.
为上述端口以及端口 3000(对于 Next.js 实例)添加防火墙规则(TCP/UDP + 传入/传出)。
将 SurrealDB 的地址和端口绑定 (
--bind
) 更改为其他内容。请注意,启动 SurrealDB 时可用的 --addr
标志是我尚未尝试过的东西,因为我似乎无法完全弄清楚操纵它的正确方法。这可能是问题所在吗?
尝试通过本地网络和外部 WSS 端口测试工具连接,均失败,
重新排序 nginx 配置以使用
location /ws
而不是 server
指令只是为了看看它是否可行(不幸的是它没有)。
这是我每次尝试从任何媒体连接时遇到的错误:
有什么建议吗?我可能遗漏了什么,或者我做错了吗?
(请注意,所提供示例中的 [...] 是被审查的域名,而不是文字字符。)