1. 首页
  2. 实战操作

教程:设置IPFS对等体,第二部分

如何使用NGINX和IPFS设置反向代理以支持与浏览器ĐApps的安全连接

教程:设置IPFS对等体,第二部分
照片由瑟尔维亚Bartyzel上  Unsplash

今天,我们将通过扩展我们的设置以支持通过WebSockets与基于浏览器的()对等体的安全p2p连接来快速(并且成本低廉)地启动AWS EC2 IPFS对等体。如果这对你来说听起来有点拗口,那么你就掌握得很好。我们将采取一步一步的方法来设置事物。因此,在我们继续之前,请查看我们之前的帖子,并确保您在设置AWS EC2实例之前感到满意,然后再继续。请注意,在继续之前,您可能需要在EC2实例上打开端口90和443。js-ipfsgo-ipfs

但首先……为什么我们想要首先解决所有这些问题?您无需执行任何操作即可简单地运行普通go-ipfs对等体。事实上,如果你按照我们之前的教程,你已经有了一个!但是,如果您想运行安全网关,或者希望能够连接到基于浏览器的对等方(如运行ĐApps的那些),则必须执行这些步骤。通过使用安全协议,我们确保您的对等体和基于浏览器的对等体之间的流量是加密和私有的。此外,js-ipfs浏览器中使用的WebCrypto API 需要安全的来源,因此有一个安全的网关来访问它们很有用。但是不要相信我们的话!我们鼓励您阅读网络安全性,并亲自了解为什么要保护您的网络流量 对于更安全的Web体验非常重要。

设置我们的服务器

既然我们都在同一个页面上,那么您需要的唯一其他内容就是您拥有管理员权限的域名(或者您可以让其他人为您管理)。如果您没有域名可以使用,则必须a)获得一个(可以相对便宜地完成),或者b)跳过安全连接的东西(尽管这有点像这个特定教程的重点) 。

因此,启用到IPFS对等节点的安全websocket连接的第一步是通过反向代理服务器运行所有连接。有一个现有的教程,通过其中的一些步骤,并提供了这篇文章的一些灵感。Nginx是世界上最受欢迎的网络服务器之一,负责托管互联网上一些规模最大,流量最高的网站。它可以用作Web服务器或反向代理,并且在大多数操作系统上都得到很好的支持。所以让我们用吧!

许多最初的Nginx设置来自DigitalOcean的这个优秀教程。与前一篇文章一样,除非另有说明,否则在进入sshEC2实例后,以下命令都应输入终端。如果前面的句子听起来像胡言乱语,请返回并阅读教程第一部分

Nginx在Ubuntu的默认存储库中可用,因此安装非常简单:

sudo apt-get update 
sudo apt-get install nginx

现在让我们检查一下我们的服务器,它应该在初始安装后启动并运行:

systemctl status nginx

如果一切顺利,你应该得到一些输出,例如:

●nginx.service  - 高性能Web服务器和反向代理服务器
   已加载:已加载(/lib/systemd/system/nginx.service;已启用;供应商预设:已启用)
   活动:自Mon xxxx-xx-xx以来处于活动状态(正在运行) xx:xx:xx UTC; xxxxx之前

现在进行真正的测试:获取Public DNS (IPv4)实例的名称(参见我们之前的教程)并将其输入浏览器的地址栏(http://ec2–xx–xxx–x–xx.us-xxxx-2.compute.amazonaws.com),您应该看到默认的Nginx登录页面,如下所示:

教程:设置IPFS对等体,第二部分

您现在可以执行诸如stopstartrestart您的服务器之类的操作,以及reload您的配置设置(稍后详细介绍),或者enable您的服务器在重新启动时启动(这是一个好主意,因为您的IPFS对等已经执行此操作)。您可以使用以下命令执行以下任何操作(替换{cmd}stopstart等):

sudo systemctl {cmd} nginx

有关DigitalOcean链接的更多信息,请随时查看。同时,在开始设置我们的安全反向代理服务器之前,请确保我们的自定义域名指向正确的位置。

设置子域

Ok, so you might be wondering at this stage: “why do I need a custom domain name to use IPFS?” And the answer is, you don’t! You only need one if you want to support secure TLS connections. “Ok, but why do I need a domain name to support secure TLS connections?” Another good question! Because we need to be able to prove that we control the instance for which we want a browser-trusted certificate. The easiest way to do that is to point our domain name to our instance, and have the Let’s Encrypt CA look at the domain name being requested and issue one or more sets of challenges. It’s a complicated process under the hood, so we encourage to you check out the Let’s Encrypt website for more details.

如果您已经有权访问自定义域名,那就太好了。否则,您可以创建一个随机域名,然后将其注册到像GoDaddy这样的人。如果它真的只是一个随机的字符串,那么它很便宜。好的,所以我在很久以前为我的个人博客注册了GoDaddy的域名,所以我要添加一个指向我的EC2实例的子域,我将请求SSL证书(稍后会详细介绍) )。无论您使用哪个域名注册商,他们都应该有编辑CNAME记录的工具。您将要添加指向服务器名称的子域。对于GoDaddy,这看起来像这样:

教程:设置IPFS对等体,第二部分
‘Points to’应指向  实例的Public DNS (IPv4)名称

您应该能够通过ipfs.my-domain-name.com在浏览器的地址栏中键入上述子域()来测试事情是否正常。如果您看到与上面相同的Nginx“欢迎”消息,那么事情就会奏效!

现在让我们为我们的Nginx设置添加一些配置选项,这样我们就可以为IPFS对等设备提供超级强大功能,并提供比欢迎页面更有趣的功能。

安全网关和Websockets

现在我们已经设置了自定义域并指向正确的位置(或EC2实例),我们需要在Nginx服务器上启用HTTPS。我们将使用Let的加密  – 一个免费,自动化和开放的证书颁发机构 – 来做到这一点。让加密是一个很棒的项目,它为网络社区提供了很好的服务。它们可以快速,轻松地以最易于使用的方式免费为网站启用HTTPS(SSL / TLS)。

为了更轻松地使用Let的加密,我们将使用Electronic Frontier Foundation(EFF)Certbot工具在我们的服务器上自动启用HTTPS 。Certbot提供了一组很好的下拉菜单选项,可以为您的系统和服务器选择正确的设置。我们使用NginxUbuntu 16.04 (xenial)本教程,所以要大胆向前,并选择配置。接下来,只需按照说明(我正在下面再现),并且不要忘记阅读自动更新和所有那些美好的事情,而你在那里。

sudo apt-get update 
sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:certbot / certbot 
sudo apt-get update 
sudo apt-get install python-certbot-nginx

Certbot有一个适用于Ubuntu的Nginx插件,这使得设置起来非常容易。运行以下命令将为您获取证书并让Certbot自动编辑您的Nginx配置:

sudo certbot --nginx -d ipfs.my-domain-name.com

这将启动一个交互式shell提示符,它将指导您完成a)获取证书,b)配置Nginx服务器以及c)将所有流量重定向到HTTPS所需的最小步骤。当它要求您时please choose whether or not to redirect HTTP traffic to HTTPS,选择2启用重定向的选项。如果一切顺利,您应该看到祝贺消息和测试配置的链接。您还可以通过访问以https:开头的子域来在浏览器中测试内容https://ipfs.my-domain-name.com

配置安全连接

现在有点棘手的部分。我们将定制我们的Nginx反向代理配置以连接到我们的底层IPFS对等地址。我们将从我们的网关开始(如果你启用了这个),并添加了WebSocket支持,以便浏览器对等体可以连接到我们的对等体。

/etc/nginx/sites-available/default使用您喜欢的终端编辑器打开位于的配置文件。nano如果你没有喜欢的话,这是一个不错的选择,虽然Ubuntu有几个选项(我用vim)。如果向下滚动到文件的底部,您将看到几行# managed by Certbot添加了注释。这些是支持TLS / SSL的主要部分。我们将首先关注最后两个 server条目(为简洁起见,我删除了无关的注释)。

server { 
  root / var / www / html; 
  server_name ipfs.my-domain-name.com; #由Certbot管理
  location / { 
      #首先尝试将请求作为文件提供,然后
      #作为目录,然后回退到显示404. 
      try_files $ uri $ uri / = 
    }
listen [::]:443 ssl ipv6only = on; #由Certbot管理,
  听443 ssl; #由Certbot 
  ssl_certificate /etc/letsencrypt/live/ipfs.my-domain-name.com/fullchain.pem 管理; #由Certbot管理
  ssl_certificate_key /etc/letsencrypt/live/ipfs.my-domain-name.com/privkey.pem; #由Certbot管理
  包括/etc/letsencrypt/options-ssl-nginx.conf; #由Certbot 
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem 管理; #由Certbot管理
}
server { 
if($ host = ipfs.my-domain-name.com){ 
   return 301 https:// $ host $ request_uri ; 
由Certbot管理
听80; 
听[::]:80; 
server_name ipfs.my-domain-name.com; 
返回404; #由Certbot管理
}

server上面的第一个条目是提供该欢迎页面的内容。带# managed by Certbot注释的所有行都设置了TLS / SSL证书信息,以便您的服务器知道如何与连接到它的任何客户端进行安全连接。我们将删除root此部分中的location条目并将条目更改为指向我们的网关(如果您在上一个教程中启用了此项,否则,您可以删除此条目)。该location条目现在看起来像这样:

location / { 
    proxy_pass http://127.0.0.1:8080 ; 
    proxy_set_header Host $ host; 
    proxy_cache_bypass $ http_upgrade; 
  }

上面的第二个服务器条目只是永久地(301)将端口80流量重定向到端口443404否则默认为。这些数字是HTTP代码,您可以查找它们以供参考。我们根本不打算接触这个条目。

现在是有趣的部分,通过端口将安全连接重定向到端口4002上的普通旧流量8081,这将是我们的websocket p2p连接的主页(IPFS默认情况下不支持安全连接,这就是我们在第一次执行此操作的原因)地点)。为什么8081?因为这是我们在上一个教程中设置的端口😀。你知道吗?你为什么不继续在另一个标签中打开那篇文章

现在看起来与我们之前的server条目非常相似,除了这次我们正在监听端口4002,我们的升级头文件专门针对websocket支持进行了调整

server { 
    server_name ipfs.my-domain-name.com;
    listen [::]:4002 ssl ipv6only = on; 
    听4002 ssl;
ssl_certificate /etc/letsencrypt/live/ipfs.my-domain-name.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/ipfs.my-domain-name.com/privkey.pem; 
    include /etc/letsencrypt/options-ssl-nginx.conf; 
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / { 
        proxy_pass http://127.0.0.1:8081 ; 
        proxy_http_version 1.1; 
        proxy_set_header升级$ http_upgrade; 
        proxy_set_header连接“升级”; 
    } 
}

您的整体defaultNginx配置文件现在应该如下所示:

服务器{
server_name ipfs.my-domain-name.com;
listen [::]:4002 ssl ipv6only = on;
听4002 ssl;
ssl_certificate /etc/letsencrypt/live/ipfs.my-domain-name.com/fullchain.pem; #由Certbot管理
ssl_certificate_key /etc/letsencrypt/live/ipfs.my-domain-name.com/privkey.pem; #由Certbot管理
include /etc/letsencrypt/options-ssl-nginx.conf; #由Certbot管理
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; #由Certbot管理
位置 / {
proxy_pass http://127.0.0.1:8081;
proxy_http_version 1.1;
proxy_set_header升级$ http_upgrade;
proxy_set_header连接“升级”;
}
}
服务器{
server_name ipfs.my-domain-name.com; #由Certbot管理
位置 / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $ host;
proxy_cache_bypass $ http_upgrade;
}
listen [::]:443 ssl ipv6only = on; #由Certbot管理
听443 ssl; #由Certbot管理
ssl_certificate /etc/letsencrypt/live/ipfs.my-domain-name.com/fullchain.pem; #由Certbot管理
ssl_certificate_key /etc/letsencrypt/live/ipfs.my-domain-name.com/privkey.pem; #由Certbot管理
include /etc/letsencrypt/options-ssl-nginx.conf; #由Certbot管理
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; #由Certbot管理
}
服务器{
if($ host = ipfs.my-domain-name.com){
return 301 https:// $ host $ request_uri;
由Certbot管理
听80;
听[::]:80;
server_name ipfs.my-domain-name.com;
返回404; #由Certbot管理
}

您现在可以保存,退出和重新加载(sudo nginx -s reload)配置。

哇,这是一个很严重的黑客攻击…快速休息,喝咖啡,然后让我们对这个超级供电的IPFS对等节点进行最后的修改……

加强我们的IPFS游戏

背部?太棒了,最后的推动就在这里。我们将启用一些不错的IPFS功能来帮助我们连接到基于浏览器的对等节点。我们将Swarm.EnableRelayHop通过我们的IPFS repo的config命令启用websocket支持和中继跳转来完成此操作。

ipfs config Addresses.Swarm'[“/ ip4 / 0.0.0.0.0 / tcp / 4001”,“/ ip4 / 0.0.0.0 / tcp / 8081 / wws”,“/ ip6 / :: / tcp / 4001”]' - json 
ipfs config --bool Swarm.EnableRelayHop true

注意我们已经使用8081了websocket(ws)连接端口,但是将我们的常规tcp连接端口保留为4001。这是因为我们没有通过我们的Nginx反向代理管理这个端口,所以我们可以让它通过不变,而我们希望Nginx管理我们的安全websocket支持。好吧?

好的,让我们重启我们的IPFS守护进程(sudo systemctl restart ipfs),然后测试一下。如果您已启用安全网关,请继续将浏览器指向https://ipfs.my-domain-name.com/ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv。这应该看起来非常熟悉我们之前发布的截图…除了这次我们有一个漂亮的绿色锁图标(使用Firefox)来表示安全连接!

教程:设置IPFS对等体,第二部分

但等等,还有更多。我们也可以尝试通过安全的websockets连接到我们的IPFS对等体。试一试吧。您可以快速,方便地测试WebSocket连接使用简单的网络应用程序在websocket.org。在该Location字段中输入您的域名,然后输入端口4002,然后单击“连接”。您应该收到CONNECTED消息,然后是Blob响应。

教程:设置IPFS对等体,第二部分

最后,您可以4001通过检查是否有任何连接的对等方来确保您的其他对等连接(swarm)端口()是打开的并且可以访问。ipfs swarm peers应打印出当前与对等节点通信的一长串对等地址。多么酷啊?!

回顾一下,下一步是什么?

在我们之前的教程中,我们在Amazon AWS EC2实例上设置了一个基本的IPFS对等节点。这一次,我们通过设置防火墙,安装和运行Nginx反向代理服务器,将我们的自定义子域指向我们的EC2实例,并通过Let生成加密密钥来启用安全TLS / TCP连接,构建了该设置之上。加密。在此过程中,我们(可能)启用了一个公共IPFS网关,并设置我们的对等体以支持浏览器对等,中继跳跃等等。

下一个是什么?那么,对于现代化的生产设置,您可能会通过使用容器化的编排解决方案(我们在此不会介绍)来为您的未来自己节省一些痛苦。而且我们实际上只是触及了IPFS支持的许多功能和配置的表面。因此,请加入我们的本教程系列中的未来帖子,以了解有关这些很酷的功能,它们的含义,它们如何影响您的对等节点以及您可能(或可能不想)尝试它们的原因的更多信息。

在平均时间,为什么不看看我们的其他一些故事,或登录我们的纺织照片候补名单,看看有什么我们正在与IPFS建筑,甚至我们写信,告诉我们什么冷却分布式Web项目努力 – 我们很乐意听到它!

原创文章,作者:Haskell,如若转载,请注明出处:https://ipfsdrop.com/wiki/tutorial-set-up-ipfs-peer-the-second-part/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code