网站搜索

如何将 Nginx 配置为 Nodejs 应用程序的反向代理


Nodejs 是一个免费开源、轻量级、可扩展且高效的 JavaScript 框架,基于 Chrome 的 V8 JavaScript 引擎构建,并使用事件驱动、非阻塞 I/O 模型。 Nodejs 现在无处不在,并且在开发软件(从网站、Web 应用程序到网络应用程序等)方面变得非常流行。

Nginx 是一款开源、高性能的 HTTP 服务器、负载均衡器和反向代理软件。它具有简单的配置语言,使其易于配置。在本文中,我们将展示如何将 Nginx 配置为 Nodejs 应用程序的反向代理。

另请阅读:保护、强化和提高 Nginx Web 服务器性能的终极指南

注意:如果您的系统已经运行NodejsNPM,并且您的应用程序在某个端口上运行,直接进入第4步

第1步:在Linux中安装Nodejs和NPM

最新版本的 Node.jsNPM 可以从官方 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 应用程序的反向代理。使用下面的反馈表提出任何问题或分享您对本文的看法。