【后端】云服務器用nginx配置域名訪問前后端分離項目

  • 云服務器有多個服務(前端 3000 端口、后端 8288 端口,甚至還有別的服務)。
  • 希望用戶只輸入 域名(比如 https://example.com),而不是 example.com:3000example.com:8288
  • 本質上是要做 端口隱藏 + 域名統一入口

核心方案是:用 Nginx / Caddy / Apache 作為反向代理(網關入口),監聽標準端口 80/443,把請求轉發到后端對應服務端口


🔧 實現方式:Nginx 反向代理

1. 安裝 Nginx

(大多數云服務器鏡像都內置了 Nginx,沒有就 apt/yum install nginx


2. 配置虛擬主機

假設你有:

  • 前端 React/Vue 項目跑在 3000 端口
  • 后端 API 服務跑在 8288 端口

👉 你希望訪問方式變成:

  • https://example.com/ → 前端頁面
  • https://example.com/api/ → 后端 API

Nginx 配置:

server {listen 80;server_name example.com;# 前端(3000端口)location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 后端 API(8288端口)location /api/ {proxy_pass http://127.0.0.1:8288/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

👉 用戶訪問 https://example.com/api/user,Nginx 會轉發到 http://127.0.0.1:8288/user
👉 用戶訪問 https://example.com/,會自動轉到 http://127.0.0.1:3000/


3. 其他服務端口同理

比如你還有 8080 端口的服務,可以映射為:

location /admin/ {proxy_pass http://127.0.0.1:8080/;
}

這樣所有 非標準端口服務 都可以通過 域名 + 路徑 來訪問,不需要輸入端口。


🔐 HTTPS 支持

再加上證書就能用 443 端口,避免瀏覽器提示不安全。
示例(Let’s Encrypt 免費證書):

server {listen 443 ssl;server_name example.com;ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;location / {proxy_pass http://127.0.0.1:3000;}location /api/ {proxy_pass http://127.0.0.1:8288/;}
}

? 總結

一臺服務器綁定多個端口的服務,要讓用戶只輸入域名訪問:

  1. 統一入口:80/443 端口(HTTP/HTTPS)。
  2. 用 Nginx/Apache/Caddy 做反向代理,把不同路徑轉發到不同端口。
  3. 用戶永遠只用域名,Nginx 在后臺幫你隱藏端口。

整理一個 一鍵可用的 Nginx 配置模板,支持:

  • 前端項目(3000 端口)
  • 后端 API(8288 端口)
  • 其他服務(比如 8080 → /admin/)
  • 自動 HTTP → HTTPS 跳轉
  • Let’s Encrypt 免費證書(只要申請一次即可)

🔧 完整 Nginx 配置示例

文件路徑:/etc/nginx/sites-available/example.conf

# =============================
# HTTP 自動跳轉到 HTTPS
# =============================
server {listen 80;server_name example.com;# 自動跳轉 httpsreturn 301 https://$host$request_uri;
}# =============================
# HTTPS 配置(主站)
# =============================
server {listen 443 ssl http2;server_name example.com;# SSL 證書(用 certbot/Let’s Encrypt 獲取)ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;# 一些推薦的 SSL 配置ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;# =============================# 前端服務 (3000端口)# =============================location / {proxy_pass http://127.0.0.1:3000;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;}# =============================# 后端 API (8288端口)# =============================location /api/ {proxy_pass http://127.0.0.1:8288/;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;}# =============================# 其他服務 (8080端口)# =============================location /admin/ {proxy_pass http://127.0.0.1:8080/;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;}
}

🚀 使用步驟

  1. 安裝 certbot 并申請證書
    (以 Ubuntu 為例)
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com
  1. 保存配置并啟用
sudo ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
sudo nginx -t   # 檢查配置是否正確
sudo systemctl reload nginx
  1. 測試訪問
  • https://example.com/ → 前端(3000)
  • https://example.com/api/ → 后端(8288)
  • https://example.com/admin/ → 其他服務(8080)

? 從此以后,用戶訪問時 永遠只需要域名,端口完全隱藏。

👍 這個場景就是典型的 前后端分離部署方案

  • 前端 (React) → 打包后是純靜態文件,放 Nginx 上跑。
  • 后端 (Spring Boot) → 打成 jar 包,跑在后臺(一般是 8080/8288 端口)。
  • Nginx → 負責做 反向代理統一入口,屏蔽后端端口。

拆解完整步驟 👇


🚀 前后端分離項目部署流程

1. 部署 React 前端

  1. 本地打包:

    npm run build
    

    生成 build/ 目錄。

  2. 上傳到服務器:

    scp -r build/* root@your_server_ip:/var/www/react-app/
    
  3. React 訪問路徑問題:

    • 如果前端路由用了 BrowserRouter,一定要在 Nginx 配置里加:

      try_files $uri /index.html;
      

      否則刷新會 404


2. 部署 Spring Boot 后端

  1. 打包 jar:

    mvn clean package -DskipTests
    

    生成 xxx.jar

  2. 上傳服務器:

    scp target/xxx.jar root@your_server_ip:/var/www/springboot/
    
  3. 啟動 Spring Boot(建議后臺運行 + 日志輸出):

    nohup java -jar /var/www/springboot/xxx.jar --server.port=8288 > app.log 2>&1 &
    

    👉 這樣后端就跑在 http://127.0.0.1:8288

(如果要長期運行,推薦用 systemdDocker 部署。)


3. 配置 Nginx

編輯 /etc/nginx/sites-available/project.conf

server {listen 80;server_name example.com;# ==================# 前端 React 靜態資源# ==================root /var/www/react-app;index index.html;location / {try_files $uri /index.html;}# ==================# 后端 SpringBoot API# ==================location /api/ {proxy_pass http://127.0.0.1:8288/;   # 反向代理到 Spring Bootproxy_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;}
}

4. 啟用配置 & 重啟 Nginx

sudo ln -s /etc/nginx/sites-available/project.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5. 配置 HTTPS(推薦)

使用 Let’s Encrypt 免費證書:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com

然后配置會自動加上 443,強制跳轉到 https


? 最終效果

  • https://example.com/ → React 前端頁面
  • https://example.com/api/... → Spring Boot 后端接口
  • 用戶只需要記住 域名,端口全隱藏,前后端統一由 Nginx 分發。

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

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

相關文章

軟考中級數據庫系統工程師學習專篇(67、數據庫恢復)

67、數據庫恢復數據庫故障恢復中基于檢查點的事務分類與處理策略在數據庫系統發生故障后的恢復過程中,?檢查點(Checkpoint)?? 技術是關鍵機制,它能有效縮小恢復范圍,減少需要掃描的日志量,從而加速恢復進…

SpringBoot 分庫分表 - 實現、配置與優化

分庫分表(Database Sharding)是一種數據庫架構優化技術,通過將數據分散到多個數據庫或表中,以應對高并發、大數據量場景,提升系統性能和擴展性。 在 Spring Boot 中,分庫分表可以通過框架支持(如…

爬蟲代理實操:選擇可靠的HTTP(S)代理的方法

在爬蟲工作里,選對代理協議(HTTP/HTTPS)只是第一步,更關鍵的是找到 “可靠” 的代理 —— 哪怕是 HTTPS 代理,若節點不穩定、IP 純凈度低,照樣會頻繁被封,反而耽誤采集進度。這幾年踩過不少坑&a…

數據庫常見故障類型

數據庫常見故障類型數據庫系統運行過程中可能發生的故障主要分為以下三類,其破壞性由小到大:故障類型別名根本原因影響范圍典型例子?1. 事務故障?邏輯故障事務內部的程序邏輯錯誤或輸入異常。?單個或少量事務。- 輸入數據不合法(如除零錯誤…

【Android】Span富文本簡介

一,概述android.text包下span體系類,主要指Spanned、Spannable、ParagraphStyle、CharacterStyle實現類。Android通過Span體系,搭建了富文本API,其中Spanned、Spannable實現了CharSequence接口,旨在映射段落start~end之…

【HTML】draggable 屬性:解鎖網頁交互新維度

一、簡介 在Web開發中,用戶與內容的交互方式直接影響用戶體驗的深度。在 HTML 中,draggable 是一個全局屬性,通過簡單配置即可讓任意元素實現拖拽功能。也可通過結合 draggable 屬性和 JavaScript 事件,可以實現豐富的拖放交互功能…

如何在Github中創建倉庫?如何將本地項目上傳到GitHub中?

1.1 點擊New repository(這個是創建代碼倉庫的意思)初次完成后只有一個文件最后:在本地git clone 項目地址然后把項目文件復制到git的文件夾內再提交到遠程倉庫git add . git commit -m "修改https"git push origin mainmain為分支…

【前端教程】HTML 基礎界面開發

一、網站導航欄設計與實現 導航欄是網站的重要組成部分&#xff0c;負責引導用戶瀏覽網站的各個板塊。以下是一個實用的導航欄實現方案&#xff1a; 實現代碼 HTML 結構&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8" /&…

【學Python自動化】 6. Python 模塊系統學習筆記

一、模塊基礎 什么是模塊&#xff1f;包含 Python 定義和語句的 .py 文件解決代碼復用和組織問題每個模塊有自己的命名空間創建模塊示例# fibo.py - 斐波那契模塊 def fib(n):"""打印小于n的斐波那契數列"""a, b 0, 1while a < n:print(a, e…

機器學習-時序預測2

門控循環單元GRU 接著機器學習-時序預測1-CSDN博客這個說&#xff0c;GRU是LSTM的一個簡化而高效的變體&#xff0c;都使用“門控機制”來控制信息流&#xff0c;但它通過合并一些組件&#xff0c;使結構更簡單、參數更少、計算更快&#xff0c;同時在許多任務上性能與 LSTM 相…

數據湖與數據倉庫

大數據前沿技術詳解 目錄 數據湖技術湖倉一體架構數據網格實時流處理技術云原生數據技術數據治理與血緣AI原生數據平臺邊緣計算與大數據 核心內容包括&#xff1a; 數據湖技術 - 架構模式、技術棧、面臨的挑戰 湖倉一體架構 - Delta Lake、Iceberg、Hudi等主流實現 數據網格…

Python OpenCV圖像處理與深度學習:Python OpenCV入門-圖像處理基礎

Python OpenCV入門實踐&#xff1a;圖像處理基礎 學習目標 通過本課程&#xff0c;學員們將了解OpenCV的基本概念、安裝方法&#xff0c;掌握如何使用Python和OpenCV進行基本的圖像處理操作&#xff0c;包括圖像的讀取、顯示、保存以及簡單的圖像變換。 相關知識點 Python Open…

【lua】Lua 入門教程:從環境搭建到基礎編程

Lua 入門教程&#xff1a;從環境搭建到基礎編程 Lua 是一種輕量級、可擴展的腳本語言&#xff0c;廣泛應用于游戲開發&#xff08;如《魔獸世界》《Roblox》&#xff09;、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效&#xff0c;非常適合作為編程入門語言或輔助開發工…

MySQL索引事務(未完成)

索引的相關操作1.查看索引show index from 表名;2.創建索引create index 索引名字 on 表名(列名);創建索引&#xff0c;是一個危險操作創建索引的時候&#xff0c;需要針對現有的數據&#xff0c;進行大規模的重新整理如果當前表是一個空表&#xff0c;或者數據不多&#xff0c…

Docker一鍵快速部署壓測工具,高效測試 API 接口性能

以下是對該壓測工具的簡單介紹&#xff1a; 這是一個簡易的在線壓測工具&#xff0c;可以對 API 接口/頁面、websocket服務等進行壓力測試&#xff0c;檢驗服務的并發能力使用 thinkphp ant design pro 構建&#xff0c;壓測能力驅動基于 wrk 、 php 多進程協程實現支持在線授…

前端緩存問題詳解

前端緩存是提升網頁性能和用戶體驗的重要手段&#xff0c;但也常導致資源更新不及時等問題。以下是關于前端緩存的核心知識點和解決方案&#xff1a; 一、緩存類型及工作原理HTTP緩存&#xff08;最核心&#xff09; 強緩存&#xff1a;直接從本地讀取&#xff0c;不請求服務器…

webpack升級

一、調研對比維度Webpack 4 狀態Webpack 5 改進與優勢構建速度較慢&#xff0c;增量構建效率低? 引入 持久化緩存&#xff08;filesystem cache&#xff09;&#xff0c;二次構建速度提升高達 90%Tree Shaking支持基礎 Tree Shaking&#xff0c;需手動配置? 更強的 Tree Shak…

Logstash數據遷移之es-to-kafka.conf詳細配置

在 Logstash 中配置從 Elasticsearch (ES) 讀取數據并輸出到 Kafka 是一個相對高級但強大的用法&#xff0c;通常用于數據遷移、重新索引、或構建新的數據管道。 下面我將詳細解釋配置文件的各個部分和細節。 核心配置文件結構 (es-to-kafka.conf) 一個完整的配置文件主要包含三…

在OracleLinux9.4系統上靜默滾動打補丁安裝Oracle19c

OracleLinux9.4系統 安裝Oracle19c 文章目錄OracleLinux9.4系統 安裝Oracle19c一、安裝準備1、yum安裝預檢查需要的包2、系統資源二、滾動安裝一、安裝準備 1、yum安裝預檢查需要的包 yum install libnsl yum install -y oracle-database-preinstall-19c # 最新的unzip yum i…

Android原生HttpURLConnection上傳圖片方案

創建上傳方法object FormUploader {private val BOUNDARY "Boundary-" System.currentTimeMillis()private const val LINE_FEED "\r\n"Throws(IOException::class)fun uploadImage(url: String, imageFile: File, params: MutableMap<String?, Str…