可以把整个过程理解为:
你把前端页面放到一台能通过互联网访问的服务器上,再让网址指向这台服务器。用户打开网址后,浏览器下载页面文件并把它们显示出来。
下面从"用户访问"到"你怎么部署"讲清楚。
1. 用户输入网址后,发生了什么?
假设你的网址是:
text
https://www.example.com
大致流程如下:
text
用户输入网址
↓
DNS 查询:这个域名对应什么 IP 地址?
↓
浏览器连接对应的服务器
↓
通过 HTTPS 请求页面
↓
服务器返回 HTML、CSS、JavaScript 等文件
↓
浏览器解析和执行这些文件
↓
用户看到页面
① 域名找到服务器:DNS
www.example.com 是域名,方便人记忆。
服务器通过 IP 地址被定位,例如:
text
域名:www.example.com
↓ DNS 解析
服务器 IP:203.0.113.10(示例地址)
你需要在域名的 DNS 管理后台配置解析记录,让域名指向你的服务器或托管平台。
② 浏览器向服务器请求文件:HTTP / HTTPS
找到服务器后,浏览器通过网络建立连接;使用 HTTPS 时,还会通过 TLS 验证服务器身份并加密通信。
随后浏览器发送请求,比如:
http
GET / HTTP/1.1
Host: www.example.com
意思就是:"请把这个网站首页给我。"
服务器收到请求后,可以返回一个 index.html 文件。
③ 浏览器把文件变成页面
例如,服务器返回:
html
<!doctype html>
<html>
<head>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<h1>你好,这是我的网站</h1>
<script src="/app.js"></script>
</body>
</html>
浏览器解析 HTML 时,会继续请求:
text
/style.css → 控制页面样式
/app.js → 实现交互逻辑
图片、字体等 → 页面所需资源
然后浏览器完成布局、绘制和 JavaScript 执行,用户就看到了页面。
关键点:服务器负责提供文件,浏览器负责把文件渲染成页面。 前端 JavaScript 通常在用户的浏览器中执行,而不是在服务器上执行。
2. 你需要准备什么?
如果自己用云服务器部署,一般需要:
| 东西 | 作用 |
|---|---|
| 前端构建产物 | 浏览器实际要下载的 HTML、CSS、JS 等 |
| 云服务器 | 存放文件并对外提供服务 |
| Web 服务器软件 | 如 Nginx,负责接收请求并返回文件 |
| 域名 | 给用户一个方便记忆的网址 |
| DNS 解析 | 将域名指向服务器 |
| HTTPS 证书 | 让网站可以通过 HTTPS 安全访问 |
域名不是必需的:可以先用公网 IP 测试。但正式上线通常会使用域名和 HTTPS。
3. 以 Vue / React 项目为例,怎么上线?
下面以常见的、纯客户端渲染的前端项目为例。Next.js、Nuxt 等如果使用服务端渲染,部署方式会有所不同。
第一步:把项目构建成浏览器能使用的文件
开发时你可能运行:
bash
npm run dev
这是开发服务器,主要用于本地开发,通常不应直接拿来作为生产部署方案。
上线时一般运行:
bash
npm ci
npm run build
构建后可能生成:
text
dist/
├── index.html
├── assets/
│ ├── index-xxx.js
│ └── index-xxx.css
└── 图片等资源
具体命令和输出目录以项目配置为准。
你部署的是这些构建产物,而不是让用户下载整个源代码工程。
第二步:把文件放到云服务器上
例如,把 dist 中的文件上传到:
text
/var/www/my-site/
服务器中的目录就变成:
text
/var/www/my-site/
├── index.html
└── assets/
├── index-xxx.js
└── index-xxx.css
第三步:用 Nginx 提供这些文件
安装 Nginx,然后配置一个站点,例如:
nginx
server {
listen 80;
server_name www.example.com;
root /var/www/my-site;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
含义是:
- 监听服务器的
80端口,接收 HTTP 请求。 - 处理
www.example.com这个域名的请求。 - 从
/var/www/my-site读取文件。 - 如果请求的路径没有对应文件,则返回
index.html。
最后一条主要用于 Vue Router、React Router 等单页应用的前端路由。例如用户直接打开:
text
https://www.example.com/about
服务器返回 index.html,随后前端路由根据 /about 显示对应页面。
普通多页网站不一定需要这个回退配置。
第四步:让外部能访问服务器
你需要:
- 给服务器配置公网 IP。
- 在云平台安全组中开放
80、443端口。 - 如果操作系统启用了防火墙,也要允许这两个端口。
- 确认 Nginx 已启动并加载配置。
对应关系是:
text
80 端口 → HTTP
443 端口 → HTTPS
此时通常可以先通过:
text
http://服务器公网IP
测试页面是否能打开。
第五步:配置域名解析
购买域名后,在 DNS 管理后台添加记录:
text
记录类型:A
主机记录:www
记录值:你的服务器公网 IP
DNS 记录生效后:
text
www.example.com → 你的云服务器
如果使用中国大陆服务器面向公网提供网站服务,通常还需要办理 ICP 备案,并遵守相关要求。
第六步:配置 HTTPS
为域名申请证书,例如使用支持自动续期的 ACME 工具申请 Let's Encrypt 证书,再配置 Nginx 的 443 端口和证书路径。
完成后,用户就可以通过:
text
https://www.example.com
访问网站。生产环境通常还会把 HTTP 请求重定向到 HTTPS。
4. 如果页面需要后端数据呢?
显示前端页面,不一定需要业务后端。 展示型网站可以只部署静态文件。
但如果有登录、订单、商品列表等功能,一般还需要后端 API:
text
浏览器
│
├── 请求页面文件 → Nginx → HTML / CSS / JS
│
└── 前端 JS 请求 /api/products
↓
后端服务
↓
数据库
↓
返回 JSON 数据
↓
前端更新页面内容
常见做法是让 Nginx 将:
/下的请求用于提供前端文件。/api/下的请求转发到后端服务。
这样用户访问同一个域名,就能同时使用页面和 API。数据库密码等秘密应放在后端,不能放进前端代码,因为前端文件会被用户下载。
5. 容器在这里起什么作用?
容器不是必须的,但可以用来打包部署:
text
云服务器(宿主机)
└── Nginx 容器
└── 前端构建产物
容器里的 Nginx 仍然负责返回文件,通过端口映射接收外部请求。用户看到的访问原理不变。
如果你不想维护服务器,也可以使用静态网站托管平台,上传构建产物或关联代码仓库,由平台处理文件服务、默认网址和 HTTPS;自定义域名通常只需按平台要求配置 DNS。
总结:构建前端 → 上传文件 → 配置 Web 服务 → 开放网络访问 → 域名解析 → 配置 HTTPS。用户访问时,浏览器下载这些文件,再把它们渲染成页面。