☰
静态网页部署实战:云服务器、Nginx配置与HTTPS上线指南
2026/9/30 1:39:32 网站建设 项目流程

很多人第一次听到"部署"两个字,脑子里立刻跳出运维、Linux、命令行、负载均衡这些词,觉得这是后端工程师的活。但真实情况恰恰相反:把一套 html/h5 静态网页部署到服务器上,是整个互联网里门槛最低的一件事,短则十几分钟就能从本地的双击打开变成公网可访问。问题不在于难,而在于信息太碎——域名解析、云服务器购买、安全组、Nginx 配置、缓存、路径、权限,每个环节都有几个小坑在等着你,而且这些坑的表现形式极其相似:白屏、404、403、样式丢失。这篇文章我不打算按"第一步第二步"的教科书顺序讲,而是按一个真实项目从本地到上线会经历的全部环节来拆,把每个环节背后的原因说透,你照着做一遍基本就能形成肌肉记忆。

1. 先搞清楚"静态网页部署"到底在部署什么

1.1 静态站点和动态服务的本质区别

先把概念掰开。静态网页指的是浏览器能够直接读懂并渲染的资源集合:.html文件负责结构,.css负责样式,.js负责交互逻辑,再加一堆图片、字体、图标文件。这些东西的本质是"文本和二进制文件",服务器拿到请求之后要做的事情非常简单——找到对应文件,原样塞进 HTTP 响应体里发回去。

服务器全程不"执行"任何东西。对比一下就清楚了:一个 PHP 或 Java 项目上线,服务器上要装运行时、要连数据库、要守护进程、要处理超时和并发;而静态站点的服务器只需要扮演一个"文件快递员"的角色。这个区别是整件事"秒会"的根本原因——没有运行时,就没有环境依赖;没有数据库,就没有数据迁移;没有进程,就没有崩溃重启。

理解这一点之后,你对服务器配置的期待就应该降下来。一台 1 核 2G 的入门机器,跑一个纯静态站点,哪怕日均几万 PV 也毫无压力,因为 Nginx 处理静态文件的性能高得离谱,瓶颈往往在带宽而不在 CPU。我见过太多人一上来就买 8 核 16G,最后发现 CPU 使用率常年 1% 以下,纯属浪费。

1.2 一次访问请求在服务器上到底发生了什么

要排错,就得先知道正常流程长什么样。用户在浏览器里敲进域名回车之后,经历的是一条固定的链路:

  1. 浏览器向 DNS 发起查询,把域名翻译成服务器 IP。这一步没做对,表现是"打不开、找不到服务器"。
  2. 浏览器拿着 IP 和端口(默认 80 或 443)发起 TCP 连接。这一步被挡住,表现是"连接超时"或"无法访问此网站"。
  3. 连接建立后,浏览器发出一条 HTTP 请求,里面带着路径,比如GET /index.html。
  4. 服务器上的 Web 服务(绝大多数情况是 Nginx)拿到请求,去配置里找到这个域名对应的站点根目录,然后拼出文件路径去磁盘上找。
  5. 找到了就返回 200 和文件内容;找不到返回 404;文件存在但没有读取权限返回 403。
  6. 浏览器收到 HTML 之后开始解析,遇到<link>、<script>、<img>就再发起新的请求,把这些资源一个个拿回来。

这张链路图的价值在于:它能帮你把"打不开"这个模糊的症状快速定位到具体环节。域名解析错了,第 1 步就断;安全组没放行端口,第 2 步断;Nginx 配置里的 root 指错了目录,第 4 步断;文件权限不对,第 5 步断。后面我会把每一步的排查手法都落实到具体命令。

1.3 哪些项目属于"纯静态",哪些会踩坑

不是所有看起来像网页的东西都适合按静态方式部署,提前分清楚能省下大量时间:

项目类型是否纯静态部署要点
手写的 html + css + js是直接上传即可
Vue / React / Vite 打包后的 dist 目录是上传 dist,注意路由模式
Hexo / Hugo / Jekyll 生成结果是上传 public 目录
带接口请求的前端页面是需要处理跨域或同域代理
含表单提交、需要写库否必须配后端服务
含 PHP / JSP 页面否需要运行时环境

我要重点提醒的是第四行。很多人以为"前端调接口"就不算静态了,其实前端永远只是静态资源,接口是另一个服务。你完全可以把它部署在同一台服务器上,用 Nginx 做一层反向代理,让/api开头的请求转发到本机的后端端口,这样浏览器看到的就是同源请求,跨域问题自然而然地消失了。这个思路在 h5 项目里特别常用,因为移动端 WebView 对跨域报错的处理比桌面浏览器更不友好。

另外提一句源码和构建产物的区别。像 Vue、React 这类工程化项目,仓库里有src、node_modules、package.json,这些东西一个都不需要上传到服务器。服务器上只需要dist目录里的结果。我见过有人把整个项目压缩包传上去,然后在服务器上装 Node、跑npm install、执行构建,最后因为内存不够被 OOM 杀掉——完全没必要,构建这一步应该在你本地或者 CI 里完成。

2. 服务器怎么选:从零到能跑起来的最小成本方案

2.1 轻量应用服务器和云服务器的差别在哪

国内几家主流厂商在售的机器大致分两类:轻量应用服务器和通用云服务器。名字听着玄乎,实际差异就三条:轻量的带宽通常更大、价格更低、控制台更傻瓜化;通用型的网络和存储可扩展性更强、能挂载数据盘、能做复杂的私有网络规划。

对纯静态站点来说,轻量应用服务器几乎是唯一合理的选择。原因很简单:静态站点吃带宽不吃算力,而轻量机型往往在同等价位下给到 3M 到 5M 的带宽,通用型入门款可能只有 1M。同样是 1M 带宽,理论下载速度上限约 128KB/s,一个首屏包含两三百 KB 资源的页面,用户要等两三秒才能看到内容,体验差距非常明显。

如果你的站点只是自己练手、给朋友看、或者配合小程序做活动页,轻量机型完全够用,一年成本通常在一两百元以内。如果预期会有突发流量(比如被推荐到某个社区首页),那要考虑的是带宽计费模式和是否支持弹性扩容,而不是盲目堆 CPU 核心数。

2.2 配置参数怎么读:CPU、内存、带宽、流量

云服务器控制台上那一长串参数,真正需要你关心的只有四个:

  • CPU 和内存:对静态站点几乎不构成瓶颈。2 核 2G 已经是相当宽裕的配置,1 核 1G 也能跑。热搜词里出现过"云服务器 32 核 128G 中的 128G 指的是什么",这里顺便解释清楚:那个 128G 指的是内存容量,不是硬盘也不是带宽。内存决定你能同时跑多少进程、缓存多少数据;硬盘决定你能存多少文件;带宽决定单位时间能传出去多少数据。三者是完全独立的概念,选购时别混。
  • 带宽:直接决定访问速度,是最该花钱的地方。
  • 月流量包:按流量计费的机型要想清楚总量,静态页面单次访问消耗的流量可以估算——首屏资源加在一起的总字节数乘以预估访问次数,就是大致消耗。
  • 系统盘:静态站点占用极小,20G 起步的盘绰绰有余。

我的建议很直白:CPU 和内存挑最低档,把预算全压在带宽上。

2.3 系统镜像与安全组:两个最容易漏掉的设置

系统镜像选什么,取决于你打算用什么方式管理服务器。如果准备装图形化面板,选主流的稳定版 Linux 发行版即可,常见的有 Ubuntu LTS 系列、Debian、Rocky/AlmaLinux 这类。我不太建议新手选那些默认带桌面环境的镜像,多余的组件只会增加被扫描面。

安全组是新手第一个大坑,而且是"排查半天找不到原因"的那种。安全组本质上是一层虚拟防火墙,默认通常只放行 22 端口(SSH 登录用)。你的网页默认走 80 端口,配了 HTTPS 走 443 端口,这两个必须在安全组里显式放行,否则无论 Nginx 配置多正确,外部都连不上。

顺手提一个习惯问题:只开放真正需要的端口。80、443、22 之外,其余一律关闭。数据库端口、调试端口、管理后台端口都不要暴露在公网。这不是什么高深的安全知识,就是最基本的收敛原则。

2.4 域名与访问方式的现实取舍

不用域名,直接用 IP 加路径访问,技术上完全可行,适合临时演示。但只要站点是要长期用的,域名几乎是必需品:IP 地址会变,域名不会;IP 无法配置 HTTPS 证书(证书签发机构基本不给纯 IP 签发),而现代浏览器对非 HTTPS 页面的限制越来越多,定位、摄像头、部分接口都会受限。

域名的准备流程里,有一个现实约束需要提前知道:如果你的服务器位于国内机房,域名解析到这台机器之前需要完成实名与备案等前置流程,这个环节耗时从几天到三周不等,具体以服务商的提示为准。很多人是先买服务器、写完代码,最后才发现卡在这一步,白白浪费一个月的服务器租期。如果项目时间紧、又不想走这套流程,可以考虑把服务器放在境外或港澳台地区,但会带来访问延迟增加的问题,需要自己权衡。

3. 把文件传上去:四种上传方式的实际取舍

3.1 图形化面板:新手最快上手的方式

服务器上装一个面板类工具,登录之后就是个网页版的文件管理器,可以把本地文件夹直接拖进去。这个过程符合直觉,不需要记任何命令,上传完点两下就能配好站点。

它的代价是:面板本身会占用一部分内存(通常几百 MB),并且在系统里多装了一堆你未必用得上的组件。对于 1 核 1G 的机器,装了面板之后可用内存会明显变紧。所以我的判断标准是——如果你只是想快速看到结果、以后也不打算深究,用面板;如果你希望理解整套机制、以后能自己排查问题,直接走命令行。

3.2 SFTP / SCP:清楚自己每一步在干什么

命令行传输最常用的两个工具是scp和rsync。前者简单直接,后者支持增量同步,适合反复更新。

# 把本地 dist 目录下的所有内容传到服务器的站点目录 scp -r ./dist/* root@你的服务器IP:/var/www/html/

rsync的写法更值得记住,因为它在更新场景下效率高得多——只传有变化的文件:

rsync -avz --delete ./dist/ root@你的服务器IP:/var/www/html/

几个参数的含义值得展开:-a是归档模式,保留权限和时间戳;-v输出详细过程,方便你确认传了什么;-z开启传输压缩,对文本类文件效果明显;--delete会让目标目录与源目录严格保持一致,源里删掉的文件在服务器上也会删掉。

注意:--delete加上路径写错,等于把服务器目录清空。执行前一定先确认右侧路径,可以先加-n参数做空跑测试。

3.3 Git 拉取:适合需要频繁更新的场景

如果站点会持续迭代,最舒服的方式是把构建产物推到一个 Git 仓库,然后在服务器上拉取。一次配置,之后每次更新就是几条命令:

cd /var/www/site git pull

更进一步可以做自动化:在仓库里配置一个钩子,当你推送新版本时,服务器收到通知自动执行拉取和构建。这样你的更新流程就变成了"本地 push 一下,线上自动生效",中间不需要登录服务器。缺点是首次配置略繁琐,而且要处理 Git 目录被外部访问的风险——站点根目录最好不要直接暴露.git文件夹。

3.4 构建产物和源文件的边界一定要清楚

这一条我在第 1 节提过,但值得再强调一次,因为它是最常见的浪费时间的操作。你要上传的是浏览器需要的东西,不是开发者需要的东西。判断标准很简单,问自己一句:浏览器会主动请求这个文件吗?

以下这些一律不要传:

  • node_modules目录,体积巨大且完全无用
  • 构建工具配置文件,如 webpack、vite 的配置
  • .git目录,除非你有特殊需求
  • 源码目录src,如果已经有构建产物
  • 各种.md、.map文件(source map 至少不该在生产环境暴露)

传错的直接后果除了浪费带宽和时间,还可能泄露项目结构信息。

4. Web 服务器的配置:Nginx 为什么几乎是唯一答案

4.1 安装与目录规划

静态站点领域,Nginx 的统治地位很难被撼动:内存占用小、并发能力强、配置语法清晰、社区资料丰富。Apache 当然也能做,但配置重量级和资源占用都不占优势;用 Python 自带的简易 HTTP 服务临时演示可以,正式环境绝对不行——它是单线程的,也没有任何安全防护。

安装在各发行版上就是一条命令的事,Ubuntu 系用apt install nginx,RHEL 系用dnf install nginx。装完之后建议先规划目录,别把文件随手扔在任何地方。我习惯用这样的结构:

/var/www/example.com/ # 站点根目录 /var/www/example.com/index.html /etc/nginx/conf.d/example.com.conf # 站点配置

每个站点一个独立目录、一个独立配置文件,好处是将来要迁走或者下线,直接把目录和配置一起删掉就行,不会留下垃圾文件相互干扰。很多新手把所有站点都塞进默认目录,结果两个项目互相覆盖,排查起来非常痛苦。

4.2 一份可以直接拿去用的站点配置

下面这份配置覆盖了静态站点的绝大多数需求,我逐段解释关键行:

server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html; location / { try_files $uri $uri/ =404; } location ~* \.(js|css|png|jpg|jpeg|gif|svg|woff2?|ico)$ { expires 7d; add_header Cache-Control "public"; } error_page 404 /404.html; }

server_name决定这个配置对哪个域名生效,如果域名还没解析过来,可以先写服务器 IP 测试。root就是站点根目录,Nginx 会把请求路径拼在它后面去找文件。index声明当请求路径是目录时默认返回哪个文件,这就是为什么访问example.com/能自动出首页。

try_files那一行是整份配置里最需要理解的。它的意思是:先按原路径找文件,找不到就当成目录找,再找不到就返回 404。后面讲 SPA 路由的时候,这一行会变成关键。

4.3 root 和 alias、try_files 的写法差异

这几个指令长得像,实际行为差别不小,搞混了就会出现"资源全 404"的现象。

root是把请求路径拼接在后面,alias是替换掉匹配到的部分。举个例子,如果写的是location /static/ { alias /data/files/; },那么访问/static/a.png实际读的是/data/files/a.png;如果这里用root /data/files/,读的就变成了/data/files/static/a.png。差别就在一个目录层级上,但报错表现完全一样,都是 404。

至于try_files,在单页应用里要换成这样:

location / { try_files $uri $uri/ /index.html; }

原因是单页应用的路由是前端用 JavaScript 控制的,服务器上并不存在/user/123这个真实路径。用户直接在地址栏输入这个地址,Nginx 去磁盘上找当然找不到,于是 404。改成回退到index.html之后,服务器把首页交给浏览器,前端路由再根据地址栏的路径渲染出正确页面。这就是为什么你本地开发时刷新页面永远正常,一上线刷新就白屏——本地开发服务器通常内置了这个回退逻辑。

配置改完之后,务必先测试再重载:

nginx -t # 语法检查,必须先跑 systemctl reload nginx # 平滑重载,不中断现有连接

跳过nginx -t直接重启,一旦语法有错,服务直接起不来,站点整个挂掉。我自己吃过这个亏,从那以后养成了改完必测的习惯。

4.4 开启压缩和缓存:两个立刻见效的优化

静态站点优化里性价比最高的两件事,一个是 Gzip 压缩,一个是资源缓存。

文本类资源(HTML、CSS、JS)压缩率通常能到 70% 以上,一个 300KB 的 JS 文件传过去可能只剩 90KB。开启方式是在http块或server块里配置:

gzip on; gzip_min_length 1k; gzip_comp_level 5; gzip_types text/plain text/css application/javascript application/json image/svg+xml;

gzip_min_length是为了避免压缩过小的文件——压缩本身也有开销,小于 1KB 的文件压了反而更亏。comp_levle不建议拉到 9,级别 5 左右的压缩率和 CPU 消耗比例最划算。

缓存则交给expires指令,前面配置里已经写了 7 天。这里有个坑必须知道:HTML 文件千万不要设长缓存,否则你更新了页面,用户浏览器还在用旧的 HTML,而它引用的新 JS 又找不到,页面直接崩。稳妥的做法是只给带指纹的静态资源(构建工具生成的app.abc123.js这种)设长缓存,HTML 走协商缓存或者干脆不缓存。

5. H5 页面特有的那些坑

5.1 viewport 与移动端适配的基础配置

h5 页面部署完之后,最常见的反馈是"在手机上打开字特别小"。这不是部署问题,而是缺少 viewport 声明。下面这行必须放在<head>里:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

width=device-width让布局视口等于设备宽度,initial-scale=1.0设定初始缩放比例。后面的user-scalable=no是否加,取决于你的产品需求——涉及表单输入时禁用缩放能避免 iOS 自动放大导致的布局跳动,但一定程度上牺牲了可访问性,需要自己判断。

5.2 WebView 内嵌时的缓存问题

h5 页面被 App 内嵌之后,缓存行为会比浏览器更激进,因为多数应用的 WebView 会启用本地缓存来提升打开速度。后果就是你更新了线上文件,用户看到的还是旧页面。

处理思路分三层。第一层是给请求加版本参数,比如index.html?v=20240101,参数一变就是全新 URL,缓存自然失效。第二层是配置正确的响应头,HTML 文件返回Cache-Control: no-cache或者极短的max-age,让 WebView 每次都去服务器确认。第三层是在客户端侧做处理,比如在页面加载时主动清一次缓存,或者通过配置让 WebView 走"每次加载都从网络取"的模式。

注意:有些场景下,即便服务端返回了 no-cache,客户端仍可能因为本地存储的静态资源而显示旧内容。排查这类问题时,先确认客户端有没有做额外的拦截。

5.3 history 路由与 hash 路由的服务器配置差异

这是 h5 项目上线最容易翻车的地方,值得单独说清楚。

hash 模式的地址长这样:example.com/#/user/123。井号后面的内容浏览器不会发给服务器,所以服务器永远只收到example.com/这个请求,返回 index.html 就完事了。这种模式对服务器零要求,部署最省心。

history 模式的地址长这样:example.com/user/123。这个路径会完整地发给服务器,服务器去磁盘上找user/123这个文件,当然找不到,返回 404。解决办法就是前面提到的try_files $uri $uri/ /index.html;。

所以选型时要清楚:history 模式地址更好看、更利于分享和被搜索引擎收录,代价是服务器必须做回退配置;hash 模式省事,但地址栏里那个井号在很多场景下显得不够专业。我的建议是,只要能改服务器配置,就上 history 模式,因为回退配置本身只有一行代码。

5.4 相对路径与绝对路径:白屏的头号原因

项目在本地双击打开正常,部署到服务器后整个白屏,控制台一堆 404——我遇到这个现象的次数多到可以总结出固定套路。九成以上的原因是资源路径用了以/开头的绝对路径,而站点被放在了子目录里。

举例说明:如果构建时配置的base是/,生成的 HTML 里引用的是/assets/app.js。当站点部署在example.com/根目录时没问题;但如果部署在example.com/activity/这个子目录下,浏览器会去请求example.com/assets/app.js,而文件实际在example.com/activity/assets/app.js,自然全部 404。

解决办法是在构建工具里把基础路径配成相对路径或者子目录路径。不同的构建工具参数名不一样,Vite 里是base,webpack 里是publicPath,用之前查一下对应版本的文档。特别提醒:这类问题在开发环境完全不会暴露,因为开发服务器的路径规则和生产不一样,必须用生产构建结果做一次本地预览才能提前发现。

6. 域名、HTTPS 与访问链路打通

6.1 解析记录怎么填

域名解析就是把域名指向服务器 IP,操作界面里核心要填的就是两条:记录类型和记录值。

最常用的是 A 记录,直接指向一个 IPv4 地址。主机记录填@表示域名本身,填www表示www.子域名。如果想让根域名和 www 都能访问,就配两条 A 记录,指向同一个 IP,同时在 Nginx 的server_name里把两个都写上。

解析生效需要时间,通常几分钟到几小时不等,取决于各地 DNS 服务器的缓存刷新节奏。想确认是否生效,可以用nslookup 你的域名或者dig 你的域名查一下,看返回的 IP 是不是你服务器那个。

6.2 证书申请与自动续期

HTTPS 证书现在获取成本极低,免费方案主要有两类:一类是云厂商提供的免费证书,配合控制台操作,有效期通常一年;另一类是自动化工具链路,有效期更短但支持自动续签,适合不想每年手动折腾的人。

自动化方案的核心是两条命令:一条负责申请并自动写好 Nginx 配置,另一条负责把续期任务注册进系统计划任务。配置完成后,证书到期前会自动续上,你基本不需要再管。

手动方案则需要自己下载证书文件(一般是.pem和.key两个),上传到服务器固定目录,然后在 Nginx 配置里引用。缺点是到期要记得换,我见过好几个站点因为证书过期导致浏览器弹出安全警告,用户直接关掉页面走人。

6.3 强制跳转与访问体验

配好证书之后,80 端口和 443 端口实际上都能访问,这会导致同一个页面有两个地址。搜索引擎会认为这是重复内容,用户也可能在非加密连接下输入信息。

解决办法是在 80 端口的 server 块里加一句重定向:

server { listen 80; server_name example.com; return 301 https://$host$request_uri; }

301是永久重定向,浏览器会记住这个规则,之后自动走 HTTPS。$host和$request_uri是 Nginx 内置变量,分别代表请求的域名和完整路径,这样能保证跳转后地址不失真。

7. 上线之后:更新、权限、排错与备份

7.1 403 和 404 的排查顺序

这两个状态码是上线后最常遇到的,排查思路完全不同。

404说明 Nginx 正常工作,但没找到文件。排查顺序是:先确认root指向的目录对不对,用ls看看文件是不是真在那里;再确认请求的路径大小写是否匹配——Linux 文件系统区分大小写,Index.html和index.html是两个完全不同的文件,而 Windows 和 macOS 默认不区分,所以本地正常、线上 404 的情况非常多;最后确认文件是不是被传到了子目录里。

403说明文件可能存在,但服务器没权限读。常见原因是站点目录的属主和 Nginx 工作进程的用户不一致。Nginx 通常以www-data或nginx用户运行,如果文件属主是 root 且权限是 600,就没有读取权限。修复方式:

chown -R www-data:www-data /var/www/example.com find /var/www/example.com -type d -exec chmod 755 {} \; find /var/www/example.com -type f -exec chmod 644 {} \;

目录要 755(可进入、可列出),文件要 644(可读、不可执行),这是通行的权限约定。另外在启用 SELinux 的系统上,即便权限正确也可能返回 403,需要额外确认安全上下文。

7.2 更新站点的几种做法与风险

小站点直接覆盖上传,缺点是更新过程中用户可能拿到新旧混合的文件,出现短时间的样式错乱。改进办法是先传到临时目录,再用一条mv或者rsync原子替换,或者用软链接把站点根目录指向不同版本的目录,切换时只改链接指向,瞬间完成。

带构建流程的项目,建议把"构建"和"部署"两步分开:本地构建出产物,验证无误之后再同步到服务器。不要图省事在服务器上装 Node 做构建,那台机器本来就资源紧张,构建过程吃掉内存导致其他服务被影响,得不偿失。

7.3 日志在哪看,怎么看出问题

Nginx 的日志默认在两个位置:访问日志记录每条请求的状态码和来源,错误日志记录配置错误和文件读取失败。常见路径是/var/log/nginx/access.log和/var/log/nginx/error.log。

看日志最实用的两个操作:实时跟踪用tail -f,按状态码筛选用grep:

tail -f /var/log/nginx/error.log grep " 404 " /var/log/nginx/access.log | tail -20

当我怀疑某个资源加载失败时,通常做法是在浏览器里打开开发者工具的网络面板,看具体哪个请求返回了非 200 状态,然后拿这个路径去服务器上验证文件是否存在、权限是否正确。这个"从浏览器现象反推服务器状态"的思路,比盲目重启服务有效得多。

7.4 备份与回滚的最低要求

静态站点虽然简单,但被误删或者被覆盖也是常有的事。最低限度的保护有两个:一是服务器层面定期打快照,多数云厂商控制台都支持,成本很低;二是在本地保留一份完整的构建产物,命名带上日期,出问题时直接重新上传。

真正让我吃过苦头的是rsync --delete配合错误路径的那次。当时源目录写成了空目录,同步之后站点被清空,幸好本地还有一份构建产物,重新传了三分钟就恢复了。从那以后我形成了一个习惯:任何带删除性质的同步命令,先跑一次只读模式看看它打算删什么,确认无误再执行。

8. 一套可以反复使用的最小部署流程

把前面所有内容压缩成一条可执行的路径,大约是这样:

  1. 买一台低配轻量服务器,系统选主流稳定版,安全组放行 80、443、22。
  2. 安装 Nginx,规划好站点目录和配置文件。
  3. 本地完成构建,用 rsync 把产物同步到站点目录。
  4. 写好 server 配置,配root、index、try_files,开 gzip 和资源缓存。
  5. nginx -t测试后 reload。
  6. 用服务器 IP 先验证能访问,再去配域名解析。
  7. 解析生效后申请证书,加上 80 到 443 的跳转。
  8. 设置目录权限,配好日志观察点。
  9. 打一次快照,本地留一份产物备份。

整个过程最耗时的其实不是技术操作,而是域名相关的等待时间。技术部分如果顺利,半小时内能全部完成。

最后分享一个我踩过好几次的坑:每次改完配置直接systemctl restart nginx而不先跑nginx -t。有一次少写了一个分号,重启之后服务起不来,站点直接全站不可用,恢复方式是删掉刚才的配置再重启。后来我把顺序固定成"先测语法、再平滑重载",reload的好处是即使配置有问题,旧的工作进程还在运行,站点不会立刻挂掉,给你留出修正的时间。这个小习惯看起来不起眼,但它能在关键时刻帮你避免一次完整的线上事故。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询