Go-Ethereum
我的乙太坊節點如何接受遠端連接?
我需要在我正在創建的一些 Python 和 Javascript 應用程序上使用 Web3,所以我決定在 VPS 上設置一個輕節點。該節點似乎可以工作,但我無法從 vps 外部訪問它。我確保為 RPC API 提供服務,並且我嘗試了一切,但我仍然可以從 vps 內部使用 web3。
w3 = Web3(Web3.HTTPProvider('http://<MY-IP>:8545')) print(w3.isConnected())
給
False
.相反,如果我嘗試從託管節點的本地 VPS 執行相同操作,我會得到
True
.這是我啟動節點的方式:
geth --syncmode "light" --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"
我知道讓節點可用於任何遠端連接不是一個好習慣,但我沒有儲存私鑰或餘額,我只想用它從 web3 獲取區塊鏈數據,我會看看是否有讓它只接受特定IP的方法。我怎樣才能讓它接受遠端連接?
問題可能是埠 8545 拒絕遠端連接嗎?或者是別的什麼?
首先,您應該確保您使用的是相當新的
geth
版本。我測試了我最近從官方下載站點下載的版本我的本地版本是
$ ./geth version Geth Version: 1.9.25-stable Git Commit: e7872729012a4871397307b12cc3f4772ffcbec6 Git Commit Date: 20201211 Architecture: amd64 Protocol Versions: [65 64 63] Go Version: go1.15.6 Operating System: linux GOPATH= GOROOT=go
其次,您應該確保使用新標誌,您列出的標誌已被棄用,將來將被刪除。
--rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpccorsdomain "*" --rpcapi "eth,web3"
應該替換為
--http --http.port 8545 --http.addr 0.0.0.0 --http.corsdomain '*' --http.api 'eth,web3'
最後,您還需要啟用
http.vhosts
並允許任何或僅您的域。你可以這樣做
--http.vhosts '*'
當你啟動節點時,你應該看到這一行
INFO [02-17|14:32:16.975] HTTP server started endpoint=[::]:8545 cors=* vhosts=*
即使在控制台中顯示了這條線之後,您仍然可能無法立即連接到它。
節點啟動後(可能需要一段時間),您將能夠連接到它。