如何将 Nginx 配置为 Nodejs 应用程序的反向代理
Nodejs 是一个免费开源、轻量级、可扩展且高效的 JavaScript 框架,基于 Chrome 的 V8 JavaScript 引擎构建,并使用事件驱动、非阻塞 I/O 模型。 Nodejs 现在无处不在,并且在开发软件(从网站、Web 应用程序到网络应用程序等)方面变得非常流行。
Nginx 是一款开源、高性能的 HTTP 服务器、负载均衡器和反向代理软件。它具有简单的配置语言,使其易于配置。在本文中,我们将展示如何将 Nginx 配置为 Nodejs 应用程序的反向代理。
另请阅读:保护、强化和提高 Nginx Web 服务器性能的终极指南
注意:如果您的系统已经运行Nodejs和NPM,并且您的应用程序在某个端口上运行,直接进入第4步。
第1步:在Linux中安装Nodejs和NPM
最新版本的 Node.js 和 NPM 可以从官方 NodeSource Enterprise Linux、Fedora、Debian 和 Ubuntu 二进制发行版存储库安装,该存储库由 Nodejs 网站维护您需要将其添加到您的系统中才能安装最新的 Nodejs 和 NPM 软件包,如图所示。
在 Debian/Ubuntu 上
---------- Install Node.js v11.x ----------
curl -sL https://deb.nodesource.com/setup_11.x | sudo -E bash -
sudo apt-get install -y nodejs
---------- Install Node.js v10.x ----------
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
在 CentOS/RHEL 和 Fedora 上
---------- Install Node.js v11.x ----------
curl -sL https://rpm.nodesource.com/setup_11.x | bash -
---------- Install Node.js v10.x ----------
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
第 2 步:创建 Nodejs 应用程序
为了演示目的,我们将创建一个名为 “sysmon” 的示例应用程序,它将在端口 5000 上运行,如图所示。
sudo mkdir -p /var/www/html/sysmon
sudo vim /var/www/html/sysmon/server.js
将以下代码复制并粘贴到 server.js 文件中(将 192.168.43.31 替换为您的服务器 IP)。
const http = require('http');
const hostname = '192.168.43.31';
const port = 5000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Sysmon App is Up and Running!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
保存文件并退出。
现在使用以下命令启动节点应用程序(按 Ctrl+x 终止它)。
sudo node /var/www/html/sysmon/server.js
OR
sudo node /var/www/html/sysmon/server.js & #start it in the background to free up your terminal
现在打开浏览器并通过 URL http://198.168.43.31:5000
访问您的应用程序。
第三步:在Linux中安装Nginx反向代理
我们将从官方存储库安装最新版本的Nginx,如下所示。
在 Debian/Ubuntu 上
创建一个名为 /etc/apt/sources.list.d/nginx.list 的文件,并向其中添加以下行。
deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx
接下来,添加存储库签名密钥、更新系统包索引并安装 nginx 包,如下所示。
wget --quiet http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key
sudo apt update
sudo apt install nginx
在 CentOS/RHEL 和 Fedora 上
创建一个名为 /etc/yum.repos.d/nginx.repo 的文件并粘贴以下配置之一。
中央操作系统
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever
/$basearch/ gpgcheck=0 enabled=1
RHEL
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/$releasever
/$basearch/ gpgcheck=0 enabled=1
注意:由于 CentOS 和 RHEL 之间的差异,需要将 $releasever
替换为 6 (对于6.x)或7(对于7.x),具体取决于您的操作系统版本。
接下来,添加存储库签名密钥并安装 nginx 软件包,如图所示。
wget --quiet http://nginx.org/keys/nginx_signing.key && rpm --import nginx_signing.key
yum install nginx
成功安装Nginx后,启动它,使其在系统启动时自动启动,并检查它是否已启动并运行。
---------- On Debian/Ubuntu ----------
sudo systemctl status nginx
sudo systemctl enable nginx
sudo systemctl status nginx
---------- On CentOS/RHEL ----------
systemctl status nginx
systemctl enable nginx
systemctl status nginx
如果您正在运行系统防火墙,则需要打开端口80(HTTP)、443(HTTPS)和5000(Node应用程序), Web 服务器侦听客户端连接请求。
---------- On Debian/Ubuntu ----------
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 5000/tcp
sudo ufw reload
---------- On CentOS/RHEL ----------
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=5000/tcp
firewall-cmd --reload
步骤 4:将 Nginx 配置为 Nodejs 应用程序的反向代理
现在,在 /etc/nginx/conf.d/ 下为您的 Node 应用程序创建一个服务器块配置文件,如图所示。
sudo vim /etc/nginx/conf.d/sysmon.conf
复制并粘贴以下配置(将 192.168.43.31 更改为您的服务器 IP,将 howtoing.lan 更改为您的域名)。
server {
listen 80;
server_name sysmon.tecmint.lan;
location / {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://192.168.43.31:5000;
}
}
保存更改并退出文件。
最后,重新启动 Nginx 服务以使最近的更改生效。
sudo systemctl restart nginx
OR
systemctl restart nginx
第5步:通过Web浏览器访问Nodejs应用程序
现在,您应该能够访问您的 Node 应用程序,而无需在 URL 中提供它正在侦听的端口:这是用户访问它的一种非常方便的方式。
http://sysmon.tecmint.lan
为了让您的测试域名正常工作,您需要使用 /etc/hosts 文件设置本地 DNS,打开该文件并在其中添加以下行(请记住更改 192.168.43.31)与以前一样,使用您的服务器IP和howtoing.lan使用您的域名)。
192.168.43.31 sysmon.tecmint.lan
就这样!在本文中,我们展示了如何将 Nginx 配置为 Nodejs 应用程序的反向代理。使用下面的反馈表提出任何问题或分享您对本文的看法。