如何在 Raspberry 上使用 Nginx 为 Node.js 应用程序提供服务
本教程将介绍如何使用Nginx搭建自己的服务器,以便在本地网络上使用树莓派运行Node.js应用程序。我这样做的目的是在本地网络上拥有自己的开发服务器,然后再将任何更改提交到生产主机。我们将逐步讲解所有步骤,以便您也可以轻松地搭建自己的服务器。
先决条件和规范
对于本教程,我假设您有一个安装了Raspbian 操作系统的Rasberry Pi 、具有主板的 root 访问权限、另一台连接到同一网络的计算机以及可以访问您的 Wifi 应用程序的权限。
- 板子型号: Raspberry Pi 3 B+
- 主板操作系统: Raspbian
- 主板CPU: ARMv7l
安装并运行 Nginx
要安装Nginx并在Raspberry上启动服务,请打开终端并输入以下命令:
sudo apt-get update
sudo apt-get install nginx
sudo systemctl start nginx
现在你的 Nginx 服务器已经启动并运行了。为了检查服务器是否正常工作,我们可以从另一台电脑打开浏览器,搜索我们的Raspberry本地 IP。如果你不知道你的Raspberry本地 IP,请打开一个新的终端并输入:
hostname -I
在我的情况下,它是192.168.0.173。所以我要搜索的地址是http://192.168.0.173 。在这里你可以看到Nginx的默认登录页面。
恭喜,你的Nginx服务器已经正常运行。现在我们需要提供Node.js应用,而不是静态HTML文件。怎么做?
安装 Node.js 和 NPM
显然,要使用Node.js,我们首先需要安装Node.js包和NPM(Node 包管理器)。我们还会将NPM更新到最新版本。为此,请打开一个新终端并输入:
sudo apt-get install nodejs
sudo apt-get install npm
npm install -g npm
要检查Node.js和NPM是否正确安装,请运行以下命令:
nodejs -v
npm -v
现在我们已经运行了Nginx ,并且安装了Node.js,是时候创建我们的第一个Node应用了。这个应用将是一个简单的“Hello World”,用于检查Node和Nginx是否通信正常。让我们开始编写这个应用吧。
创建 Node.js 应用
在你的主目录中创建一个名为 的新文件夹server
。在这个文件夹中,我们将创建Node.js应用。让我们来写入index.js
文件。
const express = require("express");
const app = express();
// The HelloWorld
app.get("/", (req, res) => {
res.send("Hello from Node.js!");
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`App listening on http://localhost:${port}`);
});
将此文件保存在server
我们之前创建的目录中。为了使此应用正常运行,我们需要安装express
软件包。打开终端,转到您的server
文件夹并使用NPM安装它们:
cd ~/server
npm init -y
npm install express --save
我们所做的是初始化NPM并安装express
软件包。现在我们可以使用Node.js运行该应用程序:
nodejs index.js
如果您在Raspberry中打开浏览器并搜索http://localhost:3000,您将看到此节点“Hello World”。
应用程序的 Nginx 代理
我们的应用现在运行在 3000 端口。但我们想要将所有 80 端口(Nginx服务器)的 HTTP 请求重定向到 3000 端口(Node.js应用)。我们可以通过修改Nginx的默认配置文件来实现。
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
复制此配置,删除配置文件中的所有文本并粘贴。要编辑默认文件类型:
sudo nano /etc/nginx/sites-enabled/default
编辑完成后,请crtl+X
在退出前输入“保存更改”。别忘了重启Nginx服务:
sudo systemctl restart nginx
现在,你的Nginx正在将你的 HTTP 请求重定向到你的 localhost 应用。如果我们再次访问http://192.168.0.173 ( Nginx监听的地址),我们就能看到节点“Hello World”。
配置 IP 表
目前唯一的问题是,我们可以通过http://localhost访问该应用(感谢Nginx的支持),但仍然需要通过http://localhost:3000(Node.js 的直接访问方式)访问。我们不希望3000端口对任何人开放。
想象一下,将来你因为传输个人数据并且需要SSL 证书而想将所有80端口的连接重定向到443端口。其他人仍然可以连接到3000端口,并忽略这个加密连接。
为了解决这个问题,我们只需要修改 IP 表中的两条规则。第一条规则允许 localhost (Raspberry 主机)连接到3000端口。第二条规则将拒绝其他任何人的访问。打开终端并输入以下命令:
iptables -A INPUT -p tcp -s localhost --dport 3000 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000 -j DROP
DHCP IP预留
您可能还想做的另一件事是为您的Raspberry保留一个 IP 。这样,您的设备每次连接到 Wifi 时都会具有相同的 IP 地址。
- 打开您的 Wifi 应用程序访问:http://192.168.0.1(这是您的路由器地址)
- 使用路由器底部印的用户和密码登录。
- 有一个名为“高级网络”的部分。
- 搜索DHCP IP 保留。
- 单击添加设备并搜索您的Raspberry。
- 根据您的意愿更改 IP 地址的最后一位数字。
最后的话
希望本教程对您有所帮助。如果您在操作过程中遇到任何问题,请在下方评论区留言,我会尽力帮助您。谢谢!
文章来源:https://dev.to/guimg/how-to-serve-nodejs-applications-with-nginx-on-a-raspberry-jld