当前位置: 首页 > news >正文

高效管理多后端服务:Nginx 配置与实践指南

在现代的 Web 开发和运维中,一个系统往往由多个后端服务组成,每个服务负责不同的功能模块。例如,一个电商网站可能包括用户服务、订单服务和支付服务,每个服务都运行在独立的服务器或容器中。为了高效地管理这些服务并提供统一的访问接口,Nginx 作为反向代理服务器的角色变得至关重要。

场景概述

假设我们有以下三个后端服务,每个服务对应不同的域名:

  • A 服务:域名 demoai.cn,后端运行在 http://127.0.0.1:8815
  • B 服务:域名 bb.demoai.cn,后端运行在 http://127.0.0.1:8816
  • C 服务:域名 cc.demoai.cn,后端运行在 http://127.0.0.1:8817

我们的目标是通过 Nginx 配置,将用户对这些域名的请求正确地转发到对应的后端服务,并确保整个过程安全、高效。

Nginx 配置详解

1. 全局配置

首先,我们定义 Nginx 的全局配置,包括工作进程数和每个进程的最大连接数:

worker_processes  1;
events {worker_connections  1024;
}
  • worker_processes:设置 Nginx 使用的工作进程数。对于小型应用或开发环境,设置为 1 是足够的。在生产环境中,通常会设置为 CPU 核心数。
  • worker_connections:每个工作进程可以处理的最大连接数。根据你的服务器性能和预期流量调整此值。

2. HTTP 配置

接下来,我们定义 HTTP 配置块,包含一些通用的设置:

http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;
  • include mime.types:加载 MIME 类型配置文件,确保 Nginx 能够正确处理各种文件类型。
  • default_type:设置默认的 MIME 类型。
  • sendfile on:启用高效文件传输,适用于静态文件服务。
  • keepalive_timeout:设置客户端连接保持活动的时间。

3. HTTP 重定向到 HTTPS

为了确保所有 HTTP 请求都被重定向到 HTTPS,我们配置一个 server 块:

server {listen       80;server_name  demoai.cn bb.demoai.cn cc.demoai.cn;rewrite ^(.*)$ https://$host$1 permanent;
}
  • listen 80:监听 HTTP 端口 80。
  • server_name:包含所有可能的域名。
  • rewrite:将所有 HTTP 请求重定向到 HTTPS,使用 301 永久重定向。

4. HTTPS 配置

为每个域名配置一个独立的 server 块,指定不同的 proxy_pass 目标,将请求转发到对应的后端服务。

A 服务(demoai.cn
server {listen       443 ssl;server_name  demoai.cn;ssl_certificate /root/card/demoai.cn_bundle.pem;ssl_certificate_key /root/card/demoai.cn.key;location / {proxy_pass http://127.0.0.1:8815;  # A服务的后端地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}
B 服务(bb.demoai.cn
server {listen       443 ssl;server_name  bb.demoai.cn;ssl_certificate /root/card/demoai.cn_bundle.pem;ssl_certificate_key /root/card/demoai.cn.key;location / {proxy_pass http://127.0.0.1:8816;  # B服务的后端地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}
C 服务(cc.demoai.cn
server {listen       443 ssl;server_name  cc.demoai.cn;ssl_certificate /root/card/demoai.cn_bundle.pem;ssl_certificate_key /root/card/demoai.cn.key;location / {proxy_pass http://127.0.0.1:8817;  # C服务的后端地址proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}
}

5. 通用配置

每个 server 块中都包含了以下通用配置:

  • proxy_set_header:设置转发的 HTTP 头,确保后端服务可以获取正确的客户端信息。
  • error_page:定义错误页面的路径。
  • location = /50x.html:指定错误页面的根目录。

后端服务部署

确保每个后端服务(如 Docker 容器)正在运行,并且监听在指定的端口上。例如:

# 启动 A 服务
docker run -d --name a-service -p 8815:80 aa-website:latest# 启动 B 服务
docker run -d --name b-service -p 8816:80 bb-website:latest# 启动 C 服务
docker run -d --name c-service -p 8817:80 cc-website:latest

测试与验证

  1. 检查 Nginx 配置

    nginx -t
    

    确保配置文件没有语法错误。

  2. 重新加载 Nginx

    nginx -s reload
    
  3. 访问服务

    • 访问 https://demoai.cn,应转发到 http://127.0.0.1:8815
    • 访问 https://bb.demoai.cn,应转发到 http://127.0.0.1:8816
    • 访问 https://cc.demoai.cn,应转发到 http://127.0.0.1:8817

常见问题与解决方法

1. 网络问题

如果你在访问某些服务时遇到问题(如无法解析 http://127.0.0.1:8815),可能是由于以下原因之一:

  • 后端服务未运行:确保 Docker 容器正在运行。
    docker ps
    
  • 网络问题:确保本地网络没有问题,可以尝试直接访问后端服务的地址。
    curl http://127.0.0.1:8815
    
  • 防火墙限制:确保没有防火墙规则阻止访问指定端口。
    sudo ufw allow 8815/tcp
    sudo ufw allow 8816/tcp
    sudo ufw allow 8817/tcp
    

2. 配置错误

检查 Nginx 配置文件是否有拼写错误或逻辑问题。可以使用以下命令测试配置文件:

nginx -t

3. SSL 证书问题

确保 SSL 证书和私钥路径正确,并且文件权限正确。例如:

ls -l /root/card/demoai.cn_bundle.pem
ls -l /root/card/demoai.cn.key

结论

通过合理配置 Nginx,可以高效地管理多个后端服务,确保每个域名的请求都被正确转发到对应的后端服务。这种配置不仅提高了系统的可维护性,还增强了安全性(通过 HTTPS)。希望本文的示例和解决方法能帮助你在实际项目中快速实现高效的多后端服务管理。

相关文章:

  • 兼顾长、短视频任务的无人机具身理解!AirVista-II:面向动态场景语义理解的无人机具身智能体系统
  • ssh快速连接服务器终端配置
  • pyenv简单的Python版本管理器(macOS版)
  • HarmonyOs开发之———UIAbility进阶
  • #跟着若城学鸿蒙# web篇-初探
  • 关于NLP自然语言处理的简单总结
  • AgenticSeek开源的完全本地的 Manus AI。无需 API,享受一个自主代理,它可以思考、浏览 Web 和编码,只需支付电费。
  • PyTorch中.item()函数:提取单元素张量值
  • 自用Vscode 配置c++ debug环境
  • OpenCV图像旋转原理及示例
  • Ubuntu Linux bash的相关默认配置文件内容 .profile .bashrc, /etc/profile, /etc/bash.bashrc等
  • pytorch中各种乘法操作
  • OpenCV CUDA模块中逐元素操作------数学函数
  • HDMI信号采集器连OBS没有声音的问题
  • 盒带自编教材《软件工程》目录
  • 计算机网络:蜂窝网络和WiFi网络使用的射频信号有什么区别?
  • 计算机网络:什么是电磁波以及有什么危害?
  • Spring框架的事务管理
  • 每日算法-250515
  • ProfibusDP主站转ModbusRTU/TCP与横河AXG电磁流量计通讯案例
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 探秘多维魅力,长江经济带、珠三角媒体总编辑岳阳行启动
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元
  • 悬疑剧背后的女编剧:创作的差异不在性别,而在经验
  • 小米汽车机盖门陷谈判僵局,车主代表称小米表示“退订会造成崩塌”
  • 农行回应“病重老人被要求亲自取钱在银行去世”:全力配合公安机关调查