我试图解决这个问题,我一直在经历,其中我一直无法连接到我的SurrealDB后端通过HTTPS/WSS。当尝试通过HTTP或WS连接时,一切正常,但添加任何类型的SSL似乎会破坏一切。我的当前堆栈看起来像这样:
*nginx-用于为我的web内容提供服务,并在SurrealDB示例的默认端口(:8000)上为SurrealDB示例提供反向代理。
*SurrealDB-我为我的网站使用的数据库解决方案(也许是我最喜欢的数据库解决方案之一...当它工作时😋)
*React with 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地址并被代理。
端口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,包括和排除
listen
指令上的ssl
后缀。 - 将
server_name
从dev.db.[...].com
更改为各种其他选项,但未成功, - 端口转发端口8000、443、80和8080。
- 为上述端口以及端口3000(用于Next.js示例)添加防火墙规则(TCP/UDP +传入/传出)。
- 将SurrealDB的地址和端口绑定(
--bind
)更改为其他内容。请注意,启动SurrealDB时可用的--addr
标志是我还没有尝试过的,因为我似乎无法找到正确的方法来操作它。这可能是问题所在吗? - 尝试通过本地网络和外部WSS端口测试工具连接,均失败,
- 重新排序了nginx配置,使用
location /ws
而不是server
指令,只是为了看看这是否可行(不幸的是,它没有)。
这是我每次尝试从任何介质连接时都会遇到的错误:
Console log error "WebSocket connection to wss://dev.db.censored.com/' failed
有什么建议吗?是我错过了什么,还是我做错了?
- (请注意,示例中的[...]是经过审查的域名,而不是文字字符。
1条答案
按热度按时间q1qsirdb1#
很高兴看到这个对话转移到Github问题:https://github.com/surrealdb/surrealdb.js/issues/110