如何将 Nginx 配置为 Nodejs 应用的反向代理
Nodejs是一个免费的开源、轻量级、可扩展且高效的 JavaScript 框架,它基于 Chrome 的 V8 JavaScript 引擎构建,并使用事件驱动的非阻塞 I/O 模型。Nodejs 现在无处不在,并且已成为开发网站、Web 应用、网络应用等软件的热门工具。
Nginx是一款开源的高性能 HTTP 服务器、负载均衡器和反向代理软件。它具有简单的配置语言,易于配置。在本文中,我们将展示如何将 Nginx 配置为 Nodejs 应用程序的反向代理。
另请阅读:Nginx Web 服务器安全、强化和性能提升的终极指南
注意:如果您的系统已经运行Nodejs和NPM,并且您的应用程序在某个端口上运行,请直接转到步骤 4。
步骤 1:在 Linux 中安装 Nodejs 和 NPM
可以从官方 NodeSource Enterprise Linux、Fedora、Debian 和 Ubuntu 二进制发行版存储库安装最新版本的Node.js和NPM,该存储库由 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
。
第 3 步:在 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的文件并粘贴以下配置之一。
CentOS
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever
/$basearch/ gpgcheck=0 enabled=1
红帽企业版
[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,将example.lan更改为您的域名)。
server { listen 80; server_name sysmon.example.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.example.lan
为了使您的测试域名正常工作,您需要使用/etc/hosts文件设置本地 DNS,打开它并在其中添加下面的行(记住将192.168.43.31更改为您的服务器 IP,将example.lan更改为您的域名)。
192.168.43.31 sysmon.example.lan
就这样!在本文中,我们展示了如何将 Nginx 配置为 Nodejs 应用程序的反向代理。使用下面的反馈表提出任何问题或分享您对本文的想法。