`

用Nginx设置密码来保护以太坊JSON-RPC的API

阅读更多

本文面向以太坊智能合约应用程序开发人员,并讨论如何在密码保护后,安全地运行你的以太坊节点,以便通过Internet进行安全输出。

Go Ethereum(geth)是以太坊节点最受欢迎的软件。其他流行的以太坊实现是Parity和cpp-ethereum等。分布式应用程序(Dapps)是JavaScript编码的网页,通过JSON-RPC API协议连接到任何这些以太坊节点软件,该协议是在HTTP协议之上自行运行的。

geth或没有节点软件本身不提供安全网络。将Ethereum JSON-RPC API暴露给公共Internet是不安全的,因为即使禁用私有API,这也会为琐碎的拒绝服务攻击打开一扇门。节点软件本身不需要提供安全的网络原语,因为这种内置功能会增加复杂性并为关键区块链节点软件增加攻击面。

Dapps本身是纯客户端HTML和JavaScript,不需要任何服务器,它们可以在任何Web浏览器中运行,包括移动和嵌入式浏览器,如Mist钱包内的一个。

使用Nginx代理作为HTTP基本身份验证器

有几种方法可以保护对HTTP API的访问。最常见的方法包括HTTP头中的API令牌,基于cookie的身份验证或HTTP基本访问身份验证

HTTP基本身份验证是HTTP协议的一个非常古老的功能,其中Web浏览器打开一个本机弹出对话框,询问用户名和密码。它本质上的保护是有限的,但非常容易实现,非常适合需要为有限的互联网受众暴露私有Dapp的用例。这些用例包括显示Dapp演示,私有和许可的区块链应用程序或将以太坊功能作为软件即服务解决方案的一部分。

Nginx

Nginx是最受欢迎的开源Web服务器应用程序之一。我们将展示如何设置Nginx Web服务器,以便它使用HTTP Basic Auth私下为你的Dapp(HTML文件)和geth JSON-RPC API提供服务。

我们假设Ubuntu 14.04更新的Linux服务器。文件位置可能取决于使用的Linux发行版。

安装Nginx

在Ubuntu Linux 14.04或更高版本上安装Nginx:

sudo apt install nginx apache2-utils

配置Nginx

我们假设我们编辑默认的网站配置文件/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

开始使用geth守护进程的最简单方法是在UNIX screen中运行它:

screen

geth  # Your command line parameters here

退出screen 使用CTRL+A, D

请参阅geth private testnet说明

配置Dapp

在你的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

将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

为Nginx做一次硬重启:

service nginx stop service nginx start

测试并迭代

访问网站,看看您的Dapp是否连接到代理的Geth。

检查/var/log/nginx/error.log以获取详细信息。

如果从/eth端点获得502 Bad Gateway,请确保geth正在作为服务器上的后台进程正常运行。

 

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

这里是原文

0
0
分享到:
评论

相关推荐

    php-kiss-json-rpc:库的KISS实现可与JSON RPC协议一起使用

    它提供了一组基本的类和方法来创建JSON-RPC服务器和客户端,使得实现RPC服务变得非常容易。 2. **JSON-RPC 2.0兼容**:该库支持JSON-RPC 2.0规范,这意味着它可以处理批处理请求,错误处理和通知。这符合大多数现代...

    nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

    Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route (a)客户端首次发起访问请求,nginx接收后,发现...

    rds-json-nginx-module-master.zip_nginx_nginx 解析json_rds_rds_json

    这个模块被称为RDS JSON模块,它极大地提升了Nginx在操作JSON数据时的性能,对于依赖JSON格式进行数据交换的Web应用程序来说,这是一个非常有价值的工具。 Nginx是一款开源、高性能、轻量级的HTTP和反向代理服务器...

    nginx + nginx-http-flv-module-1.2.9

    通常,你需要定义 RTMP 模块的服务器段,设置直播应用程序和流的路径,以及设置访问控制和缓存策略。 5. **推流** 标签 "推流" 提到,这意味着系统允许内容提供商通过 RTMP 协议将流媒体内容推送到 Nginx 服务器。...

    win环境使用nginx的nginx-http-flv-module.zip

    在windows 7 64位 环境下使用nginx的nginx-http-flv-module搭建flv视频流播放所有的安装包,参考:https://blog.csdn.net/qq_33071429/article/details/102628008

    windows平台nginx编译nginx-http-flv-module

    在给定的压缩包文件中,"使用必看.txt"可能包含了编译和使用过程中的注意事项,而"nginx-rtmp.zip"可能是包含了RTMP模块的源代码,这在搭建流媒体服务器时也会用到,因为HTTP FLV Module通常与RTMP模块结合使用,为...

    nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)

    对于流媒体服务器,应配置SSL/TLS加密以保护传输数据,使用`auth_basic`和`auth_key_file`进行访问控制,防止未经授权的访问。 总之,Nginx-http-flv-module和nginx-rtmp-module的结合使用为搭建高效、稳定、跨平台...

    nginx-sticky-module-1.25.zip

    下载后,在编译安装nginx时,用--add-module选项,指到sticky所在目录。类似命令如下: ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-...

    Nginx+Lua+Redis+Json

    "Nginx、Lua、Redis 和 Json 的结合应用" Nginx 是一个高性能的 ...本文介绍了如何使用 Nginx、Lua、Redis 和 Json 来构建一个高效的系统,能够处理高并发的请求,并提供了丰富的功能和模块来满足大多数的应用场景。

    nginx-1.19.3_nginx-http-flv-module.rar

    描述中的"开箱即用"意味着用户下载后可以直接使用,无需自行编译或配置。 Nginx是一款高性能的Web服务器和反向代理服务器,广泛应用于高并发场景,因其轻量级、高效稳定而受到青睐。1.19.3是Nginx的一个具体版本,...

    Nginx跨域设置Access-Control-Allow-Origin无效的解决办法

    nginx 版本 1.11.3 使用大家说的以下配置,验证无效,跨域问题仍然存在 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow...

    添加nginx-http-flv-module模块并重新编译后的nginx(windows版)

    3. 配置Nginx:打开Nginx的配置文件`conf/nginx.conf`,检查或添加必要的设置以支持流媒体服务,例如启用`flv_last_byte`和`hls`指令。 4. 集成模块:进入Nginx的`src`目录,然后将`nginx-http-flv-module`目录复制...

    nginx/1.21.6 &nginx-http-flv-module-1.2.10

    "openssl-1.1.1n"是OpenSSL的版本,这是一个强大的安全套接字层密码库,包含了各种加密算法、常用的SSL协议以及相关工具,Nginx用它来支持HTTPS和其他加密通信。 标签 "http-flv" 指的是HTTP Live Streaming (HLS)...

    nginx带nginx-http-flv模块windows编译版rtmp

    1. **在线直播**:企业和个人可以使用Nginx搭建自己的直播平台,提供稳定流畅的直播服务。 2. **视频点播**:结合HTTP FLV模块,Nginx可以作为视频点播服务的后端,提供FLV格式的视频流。 3. **混合流媒体**:通过...

    nginx上传下载之nginx-upload-module-2.3.0

    **Nginx Upload Module 2.3.0 ...总之,Nginx Upload Module 2.3.0 提供了一种有效的方式来管理和处理大文件上传,为开发者提供了更多的灵活性和控制力。正确配置和使用这个模块,能够极大地提升 Web 应用的用户体验。

    nginx-goodies-nginx-sticky-module-ng-s12451asdasd

    但问题来了,nginx在会话保持这方面比较弱,用ip_hash做会话保持有很大的缺陷,它是通过客户端ip来实现,根据访问ip的hash结果分配请求到后端的app服务器,负载不会很均匀。之前在一个小项目前中使用过这种方法,...

    nginx-http-flv-module-master.zip

    nginx-http-flv-module-master, 因为RTMP,HLS 都会存在这样那样的缺点,为了更好的解决延时问题、拉流兼容性问题,所以我们准备用flv.js 进行拉流。 对应的nginx组件

    Nginx-GUI-For-Windows-x64-v1.6.zip

    2. **启动与停止管理**:在命令行中,我们通常使用`nginx`命令来启动或停止Nginx服务。但通过GUI,用户可以更方便地进行这些操作,只需点击按钮即可实现服务的启动、停止、重启或者重载配置,避免了因命令行操作不当...

    nginx-http-flv-module(windows版)

    已编译好的nginx-http-flv-molule(windows...在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用)

    nginx-prometheus-exporter-0.11.0-linux-386.tar.gz

    2. 配置Nginx-Prometheus-Exporter,通常需要设置Nginx服务器的地址和需要监控的URL,以及其他自定义参数。 3. 运行可执行文件,启动 exporter 服务。 4. 在Prometheus配置文件中添加目标地址,指向Nginx-Prometheus...

Global site tag (gtag.js) - Google Analytics