」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > NGINX for Node.js 應用程式:什麼、為什麼以及如何使用它

NGINX for Node.js 應用程式:什麼、為什麼以及如何使用它

發佈於2024-11-04
瀏覽:760

NGINX for Node.js Applications: What, Why, and How to Use It

在扩展和优化 Node.js 应用程序时,NGINX 在处理高流量、高效服务静态文件以及充当负载均衡器方面发挥着至关重要的作用。 NGINX 是一种高性能 Web 服务器,还可以充当反向代理,使其能够跨多个服务器分发请求。在本文中,我们将介绍 NGINX 是什么、为什么应该将其与 Node.js 一起使用,以及如何为各种任务配置 NGINX,包括反向代理、负载平衡和提供静态内容。

什么是 NGINX?

NGINX(发音为“Engine X”)是一款功能强大的 Web 服务器和反向代理,旨在以高性能处理大量并发连接。 NGINX 最初是作为 Web 服务器创建的,其多功能性已将其扩展到负载平衡、反向代理和提供静态文件。

为什么将 NGINX 与 Node.js 一起使用?

  • 高效负载均衡:NGINX可以在多个Node.js实例之间分配流量,从而增强可扩展性。
  • 反向代理:充当客户端和后端 Node.js 服务器之间的中间服务器,有助于隐藏应用程序架构并平衡请求。
  • 静态内容处理:NGINX 可以提供静态文件,例如图像、CSS 和 JavaScript,从而将 Node.js 从这项任务中解放出来并提高性能。
  • SSL终止:NGINX可以处理SSL(TLS)加密,减轻Node.js的负担并提高安全性。

使用 Node.js 设置 NGINX

要为 Node.js 配置 NGINX,请按照以下步骤操作:

第 1 步:安装 NGINX

首先,您需要在服务器上安装NGINX。根据您的操作系统使用以下命令:

对于 Ubuntu/Debian:

sudo apt update
sudo apt install nginx

对于 CentOS/RHEL:

sudo yum install nginx

安装完成后,可以使用以下命令启动NGINX:

sudo systemctl start nginx

您可以通过在浏览器中访问服务器的 IP 地址来验证 NGINX 是否正在运行。如果 NGINX 正常工作,您将看到默认的 NGINX 欢迎页面。

步骤 2:将 NGINX 配置为 Node.js 的反向代理

要启用 NGINX 作为反向代理,允许其将客户端请求转发到 Node.js 应用程序,我们需要相应地配置 NGINX。

这是在 localhost:3000 上运行的 Node.js 应用程序的 NGINX 配置示例。

  1. 导航到 NGINX 配置目录:
   cd /etc/nginx/sites-available/
  1. 为您的 Node.js 应用程序创建一个新的 NGINX 配置文件:
   sudo nano nodeapp.conf
  1. 添加以下配置:
server {
    listen 80;
    server_name your_domain_or_IP;

    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;
    }
}
  1. 通过创建指向启用站点的目录的符号链接来启用配置:
   sudo ln -s /etc/nginx/sites-available/nodeapp.conf /etc/nginx/sites-enabled/
  1. 测试 NGINX 配置是否存在语法错误:
   sudo nginx -t
  1. 如果一切正常,重新启动 NGINX:
   sudo systemctl restart nginx

此设置会将端口 80 上的所有传入流量路由到在端口 3000 上运行的 Node.js 应用程序。

NGINX 作为 Node.js 的负载均衡器

当您的 Node.js 应用程序增长时,单个实例可能不足以处理流量。 NGINX 可以配置为负载均衡器,在多个 Node.js 实例之间分配流量。

以下是配置 NGINX 进行负载平衡的方法:

  1. 创建或编辑 NGINX 配置文件 (nodeapp.conf):
   sudo nano /etc/nginx/sites-available/nodeapp.conf
  1. 添加以下配置以启用负载均衡:
upstream node_backend {
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

server {
    listen 80;
    server_name your_domain_or_IP;

    location / {
        proxy_pass http://node_backend;
        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;
    }
}
  1. 保存文件,测试配置,然后重新启动NGINX:
sudo nginx -t
sudo systemctl restart nginx

解释

  • upstream 块定义了多个 Node.js 服务器(localhost:3000、localhost:3001 和 localhost:3002),NGINX 将平衡这些服务器之间的传入流量。
  • NGINX默认使用轮询算法,轮流向每台服务器发送请求。

此设置将负载均匀分布在多个 Node.js 实例之间,从而提高可扩展性和容错能力。

使用 NGINX 提供静态内容

提供图像、CSS 和 JavaScript 等静态文件可能会给 Node.js 应用程序带来负担。 NGINX 可以减轻这一责任,通过直接提供静态资产来提高性能。

  1. 为静态文件创建一个目录(例如/var/www/html/static/):
   sudo mkdir -p /var/www/html/static
  1. 将静态文件(CSS、图像、JS)移动到此目录中。

  2. 更新 NGINX 配置 (nodeapp.conf) 以提供静态文件:

server {
    listen 80;
    server_name your_domain_or_IP;

    location /static/ {
        root /var/www/html;
    }

    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;
    }
}
  1. 测试配置并重启NGINX:
sudo nginx -t
sudo systemctl restart nginx

解释

  • 静态文件的请求(例如,your_domain_or_IP/static/style.css)将直接由 NGINX 从 /var/www/html/static/ 目录提供服务,从而减少 Node.js 服务器上的负载。

使用 NGINX 终止 SSL

客户端和服务器之间的安全通信至关重要,SSL(安全套接字层)提供了这种加密。 NGINX 可以处理 SSL 终止,这意味着它在将 HTTPS 请求传递到 Node.js 应用程序之前处理它们的加密和解密。

以下是如何使用 NGINX 配置 SSL:

  1. 获取SSL证书。您可以从 Let’s Encrypt 获取免费的 SSL 证书或使用任何其他证书颁发机构。

  2. 修改 NGINX 配置以启用 SSL:

server {
    listen 443 ssl;
    server_name your_domain_or_IP;

    ssl_certificate /etc/ssl/certs/your_domain.crt;
    ssl_certificate_key /etc/ssl/private/your_domain.key;

    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;
    }
}

server {
    listen 80;
    server_name your_domain_or_IP;

    # Redirect all HTTP requests to HTTPS
    return 301 https://$host$request_uri;
}
  1. 测试并重启NGINX:
sudo nginx -t
sudo systemctl restart nginx

解释

  • listen 443 ssl 指令确保 NGINX 侦听 HTTPS 流量。
  • ssl_certificate 和 ssl_certificate_key 指定 SSL 证书和私钥的路径。
  • 从 HTTP 到 HTTPS 的重定向可确保所有流量都使用 SSL。

结论

NGINX 是一个强大的工具,用于提高 Node.js 应用程序的性能、可扩展性和安全性。从负载平衡到提供静态文件和处理 SSL 终止,NGINX 从 Node.js 卸载了许多任务,使您的应用程序能够专注于它最擅长的事情:处理业务逻辑。通过本文提供的配置,您可以设置 NGINX 来提高 Node.js 应用程序的效率和可靠性。

版本聲明 本文轉載於:https://dev.to/imsushant12/nginx-for-nodejs-applications-what-why-and-how-to-use-it-1gbn?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3