高效管理多后端服務: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)。希望本文的示例和解決方法能幫助你在實際項目中快速實現高效的多后端服務管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81596.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81596.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81596.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年PMP 學習二十一 14章 項目立項管理

2025年PMP 學習二十一 14章 項目立項管理 項目立項管理 項目建議 (Project Proposal)項目可行性分析 (Project Feasibility Analysis)項目審批 (Project Approval)項目招投標 (Project Tendering)項目合同談判和簽訂 (Project Contract Negotiation and Signing) 文章目錄 20…

用Caffeine和自定義注解+AOP優雅實現本地防抖接口限流

一、背景與需求 在實際項目開發中,經常遇到接口被前端高頻觸發、按鈕被多次點擊或者接口重復提交的問題,導致服務壓力變大、數據冗余、甚至引發冪等性/安全風險。 常規做法是前端節流/防抖、后端用Redis全局限流、或者API網關限流。但在很多場景下&…

【IP101】紋理特征提取與分析:從統計方法到深度表征的系統解析

紋理分析詳解 🎨 紋理分析就像是給圖像做"指紋識別"!每種紋理都有其獨特的"指紋",就像木紋的條紋、布料的編織、草地的隨機分布一樣。讓我們一起來探索這個既有趣又實用的圖像處理領域吧! 目錄 1. 什么是紋理…

機器學習中采樣哪些事

在機器學習中采樣主要分為兩種,過采樣(Oversample)和欠采樣(Undersample)。過采樣就是通過增加少數類樣本的數量來平衡數據集。而欠采樣就是通過減少多數類樣本的數量來平衡數據集。 通常在進行采樣中以下是幾種常用的方法: 1. 隨機采樣 隨…

fastadmin 數據導出,設置excel行高和限制圖片大小

fastadmin默認導出圖片全部都再一塊,而且不在單元格里 話不多說,上代碼 修改文件的路徑: /public/assets/js/require-table.js exportOptions: {fileName: export_ Moment().format("YYYY-MM-DD"),preventInjection: false,mso…

鴻蒙OSUniApp開發的商品詳情展示頁面(鴻蒙系統適配版)#三方框架 #Uniapp

使用UniApp開發的商品詳情展示頁面(鴻蒙系統適配版) 前言 隨著移動電商的普及,一個體驗良好的商品詳情頁對于提高用戶轉化率至關重要。本文將分享我在使用UniApp開發商品詳情頁時的實踐經驗,并特別關注如何適配鴻蒙系統&#xf…

redis中key的過期和淘汰

一、過期(redis主動刪除) 設置了ttl過期時間的key,在ttl時間到的時候redis會刪除過期的key。但是redis是惰性過期。惰性過期:redis并不會立即刪除過期的key,而是會在獲取key的時候判斷key是否過期,如果發現…

Qwen3 - 0.6B與Bert文本分類實驗:深度見解與性能剖析

Changelog [25/04/28] 新增Qwen3-0.6B在Ag_news數據集Zero-Shot的效果。新增Qwen3-0.6B線性層分類方法的效果。調整Bert訓練參數(epoch、eval_steps),以實現更細致的觀察,避免嚴重過擬合的情況。 TODO: 利用Qwen3-0.6…

HTML應用指南:利用POST請求獲取全國京東快遞服務網點位置信息

京東快遞作為中國領先的智能供應鏈與綜合物流服務提供商,自2007年成立以來,始終致力于通過技術創新與高效運營,為客戶提供安全、可靠、快速的物流解決方案。京東快遞依托京東集團的強大資源支持,憑借其自營倉儲、干線運輸、末端配送一體化的物流網絡,在激烈的市場競爭中脫…

js中eval的用法風險與替代方案全面解析

1. 前言 在 JavaScript 里,eval是一個既強大又充滿爭議的函數。它為開發者提供了一種動態執行字符串代碼的能力,在某些特定場景下能發揮出獨特的作用。然而,由于其特殊的運行機制,也帶來了諸多潛在的風險和問題。本文將深入探討e…

antd樹結構

一、場景實現 1、左側為查詢條件,查詢條件為樹和多選。點擊查詢條件在右上方顯示搜索條件的內容,右上方查詢條件 tag 刪除后,左側條件也對應刪除。 2、樹結構:默認第一層下所有節點都展開。 1、頁面效果圖 2、查詢效果圖 二、前端…

Jenkins 安裝與配置指南

Jenkins 安裝與配置指南(MD 示例) markdown Jenkins 安裝與配置指南 ## 一、環境準備 1. **系統要求** - 操作系統:Linux/macOS/Windows - Java 版本:JDK 8 或更高(建議 JDK 11)2. **安裝方式** - **L…

[Linux性能優化] 線程卡頓優化。Linux加入USB(HID)熱插拔線程占用CPU優化。Linux中CPU使用率過高優化

文章目錄 [Linux性能優化] 線程卡頓優化。0、省流版本一、問題定位:CPU 資源分析二、線程卡頓現場復現線程優化前圖片 三、線程卡頓優化方向1.如果是輪詢方式2.如果是事件驅動方式 四、修改方式線程優化后圖片 [Linux性能優化] 線程卡頓優化。 0、省流版本 如果采…

ip與mac-數據包傳輸過程學習

你管這破玩意叫網絡? 內容來源于飛天閃客,以前沒有學習過網絡的相關基礎知識,只會去瞎設置,現在終于是弄明白了。 多臺電腦之間想要通信,可以直接通過一條網線進行連接。但是隨著網線的增加,這個就會比較…

數值分析知識重構

數值分析知識重構 一 Question 請構造一下數值分析中的誤差概念以及每一個具體數值方法的誤差是如何估計的? 二 Question 已知 n 1 n1 n1個數據點 ( x i , y i ) , i 0 , 1 , ? , n (x_i,y_i),i0,1,\cdots,n (xi?,yi?),i0,1,?,n,請使用多種方法建立數據之間…

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪

使用 Qt QGraphicsView/QGraphicsScene 繪制色輪 本文介紹如何在 Qt 中利用 QGraphicsView 和 QGraphicsScene 實現基礎圓形繪制,以及進階的色輪(Color Wheel)效果。 色輪是色彩選擇器的常見控件,廣泛應用于圖形設計、繪畫和 UI …

移除鏈表元素數據結構oj題(力扣題206)

目錄 題目描述: 題目解讀(分析) 解決代碼 題目描述: 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val val 的節點,并返回 新的頭節點 。 題目解讀(分析&#…

GLPK(GNU線性規劃工具包)中建模語言MathProg的使用

GNU MathProg是一種用于描述線性數學規劃模型的建模語言。用GNU MathProg語言編寫的模型描述由一組語句和數據塊組成。 在MathProg中,模型以集合、參數、變量、約束和目標(sets, parameters, variables, constraints, objectives稱為模型對象)的形式進行描述。 在Ma…

《Python星球日記》 第77天:模型部署與總結

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 目錄 一、模型部署技術1. 模型文件導出不同模型格式對比2. 使用Flask構建RESTful API3. 使用FastAPI構建高性能API4. 部署優化與最佳實踐二、部署架構…

【JavaWeb】MySQL(準備篇)

1 MySQL安裝 1.1 解壓 下載完成后我們得到的是一個壓縮包(所有文件均在文末安裝包中),將其解壓,我們就可以得到MySQL 8.0.34 的軟件本體了(就是一個文件夾),我們可以把它放在你想安裝的位置 。 1.2 配置 1.2.1 配置…