Geth websocket over nginx 反向代理
Posted
技术标签:
【中文标题】Geth websocket over nginx 反向代理【英文标题】:Geth websocket over nginx reverse proxy 【发布时间】:2019-06-26 18:26:02 【问题描述】:我尝试使用 nginx 作为反向代理通过 websocket 连接到我的私有 geth 区块链。这是我的设置:
节点设置:
docker run
-d
--net mynet
--ip 192.168.1.21
-v myvol:/root
ethereum/client-go:stable
--datadir "/root/geth1"
--networkid 1029
--syncmode "full"
--ws
--wsaddr "0.0.0.0"
--wsport 8546
--wsapi "eth,net,web3,rpc"
--wsorigins="*"
--bootnodes $BOOTNODE
--port 30303
--maxpeers 8
--nat "any"
Nginx 配置:
server
#listen 80;
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server ipv6only=on;
server_name mydomain.de;
# basic auth stuff here
# ssl stuff here
location /mynode
if ($request_method = OPTIONS)
return 204;
auth_basic off;
add_header Access-Control-Allow-Origin "$http_origin";
add_header Access-Control-Allow-Headers "authorization, content-type";
add_header Access-Control-Allow-Methods "DELETE, GET, OPTIONS, POST, PUT, UPDATE";
# to avoid double origin value what leads to an CORS error in the browser
proxy_hide_header Access-Control-Allow-Origin;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://192.168.1.21:8546;
web3.js:
const Web3 = require('web3');
const web3 = new Web3('ws://mydomain.de/mynode');
web3.eth.getAccounts()
.then(console.log)
.catch(console.log);
此配置不适用于 websocket。在我用RPC
之前,它真的很可靠。
如果我将 -p 8546:8456
添加到我的节点并直接连接到它 (const web3 = new Web3('ws://mydomain.de:8456')
),那么一切正常。所以我猜是 nginx 配置有问题。
【问题讨论】:
你的 nginx 监听 443 端口。我认为您必须使用wss
而不是ws
。您使用了proxy_pass
到8546
端口,因此您的docker 容器必须将端口从8546 转发到8546:docker run
命令的选项-p 8546:8546
。
【参考方案1】:
正如评论中所说,要使用带有 SSL 的 websocket,您需要前缀 wss://。
【讨论】:
以上是关于Geth websocket over nginx 反向代理的主要内容,如果未能解决你的问题,请参考以下文章
STOMP over websockets 与普通 STOMP。哪一个更好?
Spring STOMP over Websocket - “私人”消息传递
Spring stomp over websocket SubscribeMapping 不起作用