在扩展和优化 Node.js 应用程序时,NGINX 在处理高流量、高效服务静态文件以及充当负载均衡器方面发挥着至关重要的作用。 NGINX 是一种高性能 Web 服务器,还可以充当反向代理,使其能够跨多个服务器分发请求。在本文中,我们将介绍 NGINX 是什么、为什么应该将其与 Node.js 一起使用,以及如何为各种任务配置 NGINX,包括反向代理、负载平衡和提供静态内容。
NGINX(发音为“Engine X”)是一款功能强大的 Web 服务器和反向代理,旨在以高性能处理大量并发连接。 NGINX 最初是作为 Web 服务器创建的,其多功能性已将其扩展到负载平衡、反向代理和提供静态文件。
为什么将 NGINX 与 Node.js 一起使用?
要为 Node.js 配置 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 欢迎页面。
要启用 NGINX 作为反向代理,允许其将客户端请求转发到 Node.js 应用程序,我们需要相应地配置 NGINX。
这是在 localhost:3000 上运行的 Node.js 应用程序的 NGINX 配置示例。
cd /etc/nginx/sites-available/
sudo nano nodeapp.conf
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; } }
sudo ln -s /etc/nginx/sites-available/nodeapp.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
此设置会将端口 80 上的所有传入流量路由到在端口 3000 上运行的 Node.js 应用程序。
当您的 Node.js 应用程序增长时,单个实例可能不足以处理流量。 NGINX 可以配置为负载均衡器,在多个 Node.js 实例之间分配流量。
以下是配置 NGINX 进行负载平衡的方法:
sudo nano /etc/nginx/sites-available/nodeapp.conf
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; } }
sudo nginx -t sudo systemctl restart nginx
解释:
此设置将负载均匀分布在多个 Node.js 实例之间,从而提高可扩展性和容错能力。
提供图像、CSS 和 JavaScript 等静态文件可能会给 Node.js 应用程序带来负担。 NGINX 可以减轻这一责任,通过直接提供静态资产来提高性能。
sudo mkdir -p /var/www/html/static
将静态文件(CSS、图像、JS)移动到此目录中。
更新 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; } }
sudo nginx -t sudo systemctl restart nginx
解释:
客户端和服务器之间的安全通信至关重要,SSL(安全套接字层)提供了这种加密。 NGINX 可以处理 SSL 终止,这意味着它在将 HTTPS 请求传递到 Node.js 应用程序之前处理它们的加密和解密。
以下是如何使用 NGINX 配置 SSL:
获取SSL证书。您可以从 Let’s Encrypt 获取免费的 SSL 证书或使用任何其他证书颁发机构。
修改 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; }
sudo nginx -t sudo systemctl restart nginx
解释:
NGINX 是一个强大的工具,用于提高 Node.js 应用程序的性能、可扩展性和安全性。从负载平衡到提供静态文件和处理 SSL 终止,NGINX 从 Node.js 卸载了许多任务,使您的应用程序能够专注于它最擅长的事情:处理业务逻辑。通过本文提供的配置,您可以设置 NGINX 来提高 Node.js 应用程序的效率和可靠性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3