• 云服务器有多个服务(前端 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…