您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Nginx設置密碼來保護以太坊JSON-RPC的API”,在日常操作中,相信很多人在怎么用Nginx設置密碼來保護以太坊JSON-RPC的API問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Nginx設置密碼來保護以太坊JSON-RPC的API”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Go Ethereum(geth)是以太坊節點最受歡迎的軟件。其他流行的以太坊實現是Parity和cpp-ethereum等。分布式應用程序(Dapps)是JavaScript編碼的網頁,通過JSON-RPC API協議連接到任何這些以太坊節點軟件,該協議是在HTTP協議之上自行運行的。
geth或沒有節點軟件本身不提供安全網絡。將Ethereum JSON-RPC API暴露給公共Internet是不安全的,因為即使禁用私有API,這也會為瑣碎的拒絕服務攻擊打開一扇門。節點軟件本身不需要提供安全的網絡原語,因為這種內置功能會增加復雜性并為關鍵區塊鏈節點軟件增加攻擊面。
Dapps本身是純客戶端HTML和JavaScript,不需要任何服務器,它們可以在任何Web瀏覽器中運行,包括移動和嵌入式瀏覽器,如Mist錢包內的一個。
有幾種方法可以保護對HTTP API的訪問。最常見的方法包括HTTP頭中的API令牌,基于cookie的身份驗證或HTTP基本訪問身份驗證。
HTTP基本身份驗證是HTTP協議的一個非常古老的功能,其中Web瀏覽器打開一個本機彈出對話框,詢問用戶名和密碼。它本質上的保護是有限的,但非常容易實現,非常適合需要為有限的互聯網受眾暴露私有Dapp的用例。這些用例包括顯示Dapp演示,私有和許可的區塊鏈應用程序或將以太坊功能作為軟件即服務解決方案的一部分。
Nginx是最受歡迎的開源Web服務器應用程序之一。我們將展示如何設置Nginx Web服務器,以便它使用HTTP Basic Auth私下為你的Dapp(HTML文件)和geth JSON-RPC API提供服務。
我們假設Ubuntu 14.04更新的Linux服務器。文件位置可能取決于使用的Linux發行版。
在Ubuntu Linux 14.04或更高版本上安裝Nginx:
sudo apt install nginx apache2-utils
我們假設我們編輯默認的網站配置文件/etc/nginx/sites-enabled/default
。我們使用proxy_pass指令與在localhost:8545
中運行的geth進行通信:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name demo.example.com; # Geth proxy that password protects the public Internet endpoint location /eth { auth_basic "Restricted access to this site"; auth_basic_user_file /etc/nginx/protected.htpasswd; # Proxy to geth note that is bind to localhost port proxy_pass http://localhost:8545; } # Server DApp static files location / { root /usr/share/nginx/html; index index.html auth_basic "Restricted access to this site"; auth_basic_user_file /etc/nginx/protected.htpasswd; } }
使用密碼創建HTTP Basic Auth用戶演示:
sudo htpasswd -c /etc/nginx/protected.htpasswd demo
開始使用geth守護進程的最簡單方法是在UNIX screen中運行它:
screen geth # Your command line parameters here
退出screen
使用CTRL+A, D
。
請參閱geth private testnet說明
在你的Dapp中,使web3.js使用/eth
端點:
function getRPCURL() { // ES2016 if(window.location.href.includes("demo.nordledger.com")) { // Password protected geth deployment return "http://demo.nordledger.com/eth" } else { // Localhost development return "http://localhost:8545"; } } // ... web3.setProvider(new web3.providers.HttpProvider(getRPCURL()));
將DApp文件復制到服務器上的/usr/share/nginx/html
。這包括index.html以及相關的JavaScript和CSS資源。
Bonus - 部署shell腳本示例:
#!/bin/bash # # A simple static HTML + JS deployment script that handles Nginx www-data user correclty. # Works e.g. Ubuntu Linux Azure and Amazon EC2 Ubuntu server out of the box. # set -e set -u # The remote server we are copying the files using ssh + public key authentication. # Specify this in .ssh/config REMOTE="nordledger-demo" # Build dist folder using webpack npm run build # Copy local dist folder to the remote server Nginx folder over sudoed # Assum the default user specified in .ssh/config has passwordless sudo # https://crashingdaily.wordpress.com/2007/06/29/rsync-and-sudo-over-ssh/ rsync -a -e "ssh" --rsync-path="sudo rsync" dist/* --chown www-data:www-data $REMOTE:/usr/share/nginx/html/
為Nginx做一次硬重啟:
service nginx stop service nginx start
訪問網站,看看您的Dapp是否連接到代理的Geth。
檢查/var/log/nginx/error.log
以獲取詳細信息。
如果從/eth
端點獲得502 Bad Gateway,請確保geth正在作為服務器上的后臺進程正常運行。
到此,關于“怎么用Nginx設置密碼來保護以太坊JSON-RPC的API”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。