news 2026/6/27 17:42:49

给后端程序员的科普 —— Nginx 在前端部署中究竟扮演什么角色?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
给后端程序员的科普 —— Nginx 在前端部署中究竟扮演什么角色?

一、从后端开发者的直觉困惑说起

Spring Boot 项目的部署流程非常简单:

mvn clean package-DskipTests# 产出 app.jardockerbuild-tmy-app.# 打包成镜像dockerrun my-app# 跑起来,浏览器就能访问了

于是自然产生一个疑问:Vue/React 项目不能这样吗?npm run build也有产物(dist/文件夹),为什么不能直接docker run

npmrun build# 产出 dist/ 文件夹dockerrun my-app# ❌ 容器直接死掉,什么也访问不了

答案藏在"产物"的本质差异里。

二、关键差异:产物里有没有 HTTP 服务器

后端 jar 包前端 dist 文件夹
产物是什么app.jar(可执行文件)index.html+.js+.css(纯数据文件)
包含 HTTP 服务器吗✅ 内嵌 Tomcat❌ 不包含任何服务器
能监听端口吗✅ Tomcat 自动监听 8080❌ 没有进程监听
能响应 HTTP 请求吗✅ Controller 在等请求❌ 没有人收请求

用后端术语类比:dist/文件夹本质上等于src/main/resources/static/下的静态文件——它们是数据,不是服务

Spring Boot 里放个index.html能访问,不是因为 HTML 自己能跑,而是因为Tomcat在对外暴露。把 Tomcat 去掉,那个 HTML 文件就是硬盘上一段字节,TCP 连接都建不起来。

Vuedist/文件夹,就是去掉了 Tomcat 的那些静态文件。

三、Docker 的运行本质

很多开发者对 Docker 有一个常见误解:以为它是一个"虚拟机",里面放了文件就能跑。

Docker 启动的是进程,进程死了容器就死。

# 这样写没有意义: FROM alpine COPY ./dist /app # 光拷贝文件,没有任何进程要跑

docker run之后,容器里一个进程都没有,Docker 发现没有前台进程 → 容器立刻退出。就算强行不让它退出,80 端口也是空的——没有程序在那里调用socket.listen(80),TCP 握手都完成不了。

核心矛盾:curl http://localhost:80/这个请求,得有人在 80 端口执行recv()才行。那个人在哪?

四、Nginx 就是那个"服务员"

Nginx 是一个持续运行的 C 程序,做了三件事:

1. 启动后不退出(进程活着 → 容器不死) 2. 调用 socket.listen(80) 监听 80 端口(有人接电话了) 3. 收到 HTTP 请求 → 读硬盘上的文件 → 返回给浏览器

放进 Dockerfile:

FROM nginx:latest # 基础镜像自带 nginx 程序 COPY ./dist /usr/share/nginx/dist # 前端文件放进 nginx 的静态目录

执行docker run后,nginx 进程跑起来 → 监听 80 端口 → 浏览器访问http://localhost/index.html→ nginx 读取/usr/share/nginx/dist/index.html→ 返回文件内容。

请求链路:

浏览器 容器 │ │ │ GET /index.html │ │ ──────────────────────────────→ │ nginx 进程 (在 80 端口 listen) │ │ │ │ 1. accept() 建立连接 │ │ 2. 解析 HTTP,拿到路径 "/index.html" │ │ 3. open() 读硬盘文件 │ │ 4. send() 把字节塞进 HTTP 200 响应 │ │ │ ←── HTTP 200 + <html>... │ │ │

五、为什么不用 webpack-dev-server?

npm run dev启动的开发服务器(webpack-dev-server)在本地调试时确实在localhost:8080提供服务。但它绝对不能上生产

webpack-dev-servernginx
设计目的本地开发调试生产环境
热更新有(每次改动自动刷新)不需要
性能模型Node.js 单线程,一个请求走 webpack 编译管线C 语言 epoll,直接从 OS page cache 读文件
内存300MB+~5MB
并发能力几百数万

webpack-dev-server 上生产 = 用自行车跑高速。不是走不通,是性能和安全都撑不住。

六、Nginx 的另一项关键能力:SPA 路由回退

Vue Router 在history模式下,用户访问/contract/detail/123,但dist/文件夹里根本没有contract/detail/123.html这个文件。为什么不是 404?

因为路由解析在浏览器端完成。服务器面对任何路径,只需要返回index.html,然后 Vue Router 在浏览器里看到路径,再决定渲染哪个组件。

这需要 nginx 配一条关键规则:

location / { try_files $uri $uri/ @rewrites; # 先尝试找实际文件 } location @rewrites { rewrite ^(.+)$ /index.html last; # 找不到就统一返回 index.html }

翻译:“磁盘上没这个文件?那就返回 index.html,让前端路由自己看着办。”

没有这条配置,用户刷新/contract/detail/123页面,nginx 老老实实去找文件,找不到就返回 404——这就是前端开发中经典的"SPA 刷新 404 问题"。

七、前后端对比,一张图总结

后端 Java 应用: ┌────────────────────────────┐ │ app.jar │ │ ┌──────────────────────┐ │ │ │ Tomcat (服务员) │ │ ← jar 包自带的 │ │ 监听 8080 端口 │ │ │ │ 执行 Controller │ │ │ └──────────────────────┘ │ │ ┌──────────────────────┐ │ │ │ static/ 静态资源 │ │ ← 没有 Tomcat,这些也是死文件 │ └──────────────────────┘ │ └────────────────────────────┘ 前端 Vue 应用: ┌────────────────────────────┐ │ Docker 镜像 │ │ ┌──────────────────────┐ │ │ │ nginx (服务员) │ │ ← 得自己配一个 │ │ 监听 80 端口 │ │ │ └──────────────────────┘ │ │ ┌──────────────────────┐ │ │ │ dist/ 前端文件 │ │ ← 只有文件,没有服务器 │ └──────────────────────┘ │ └────────────────────────────┘

核心结论:后端 jar 包自带"服务员"(内嵌 Tomcat);前端 build 出来只有"菜单"没有"服务员",所以必须配一个 nginx 来当服务员。两者的部署流水线逻辑完全一致,区别只在于"集装箱里装的是谁"。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/27 17:41:24

西安旧房翻新公司排名:解读市场格局与主体构成

在西安地区&#xff0c;寻求旧房翻新服务的业主&#xff0c;常会关注‘西安旧房翻新公司排名’这一信息。这反映了用户希望通过市场筛选机制&#xff0c;初步了解本地服务提供商的构成与概况。此类排名并非官方发布&#xff0c;多由第三方平台基于网络信息、用户评价或行业数据…

作者头像 李华
网站建设 2026/6/27 17:32:45

科研立项查新如何操作?委托机构与材料准备指南

我朋友第一次搞科研立项&#xff0c;就被科技查新卡住了。 不知道该找谁查、怎么操作、要准备啥…… 所以今天这篇文章我就把这三件事一次性说清楚&#xff01; 1.科研立项委托机构如何选择&#xff1f; 2.科研立项查新如何操作&#xff1f;我们需要做什么&#xff1f; 3.材…

作者头像 李华
网站建设 2026/6/27 17:28:18

Agent开发——LLM API 调用与理解(重点)

Day 06 案例分析:LLM API 调用与理解(重点) 主题对应学习计划 Week 2。今天不急着写完整聊天程序,先把"一次 API 调用到底发生了什么"彻底搞懂。 一、核心心智模型:API 是"无状态"的 最重要、也最反直觉的一点: LLM API 没有记忆。每次调用都是一张…

作者头像 李华
网站建设 2026/6/27 17:25:58

计算机毕业设计之jsp基于大数据的校园百事通社交平台

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统的社交平台已无法满足用户了&#xff0c;为了迎合时代需求&#xff0c;各种各样的社交平台应运而生&#xff0c;各行各业相继进入信息管理时代&#xff0c;校园百事通社交平台就是信息时…

作者头像 李华