首页 / 博客 / 本文

一台腾讯云服务器上线全流程:备案、DNS、安全组、HTTPS 与审计一次到位

🛠️ 运维📅 2026-09-18⏱ 12 分钟

「网站做好了」和「网站正式上线」之间,隔着一长串和中国大陆托管环境强相关的事:ICP 备案、域名解析、云厂商安全组、HTTPS、访问日志审计。这篇文章是本站从搭建到正式上线的完整复盘——不是泛泛的「流程介绍」,而是每一步的必要性、踩过的坑,以及能照抄的落地命令。

一句话主线。发布前搞不定的四件事按顺序是:备案(合规)→ 解析(可达)→ 安全组(可进)→ 证书/审计(可信)。顺序不能乱,因为后一步往往依赖前一步的结果:没有备案成功,很多平台甚至不让你绑定域名访问;没有解析,安全组放行再多端口也没人进得来。

一、ICP 备案:上线前的合规门槛

在中国大陆云服务器上跑 Web 服务,域名指向的站点必须完成 ICP 备案,否则服务商会拦截或封停 80/443。备案本身走云厂商控制台(腾讯云「备案」入口)提交,关键是备案通过后要把备案号挂到站点页脚并链接到工信部系统,这是规定动作:

<footer>
  <div class="copy">© TechPulse · 保留所有权利</div>
  <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">鲁ICP备2026051989号</a>
</footer>

两个细节:① beian.miit.gov.cn 是工信部备案系统官方入口,备案号要能点过去;② rel="noopener" 要加,避免新窗口打开时泄露 opener 引用。页脚挂在所有页面(含 404),而不是只挂首页——很多站要求「无论哪个页面都要能看见备案号」。静态站是每个 HTML 页一个 footer,务必全局替换,别漏掉博客详情页和 404 页。

二、DNS 解析:把域名指到公网 IP

解析这步看着简单,坑都在「忘配了某条」:

记录指向备注
A www106.54.244.151主站域名,必须配
A @(apex)106.54.244.151不配则 http://keenth.top 访问不了,还可能卡证书签发
CNAME 子域各业务如 baby.keenth.top

我这次就栽在 apex 上:给 Let's Encrypt 签发时把 keenth.top 一起带上,结果 apex 没有 A 记录,CA 拉不到挑战文件导致整张证书签发失败。ACME 挑战对「同证书的每个域名」都是硬性条件,不是「能解析就行」——先 nslookup / dig 确认每个要签的域名都能解析到本机,再签发。

三、安全组:默认只放行你真正对外开的端口

云主机外面还罩着一层「安全组」(相当于云厂商级的防火墙)。有台子经常出现「服务明明在跑、外网就是连不上」,最后发现是安全组没放行对应端口。默认建议:

端口用途建议
22SSH放行,且强烈建议只对固定 IP 或改用密钥
80 / 443HTTP / HTTPS放行 0.0.0.0/0(对外站点必需)
3001/8081 等业务口非标准服务按需放行,否则即使 nginx/uFW 放开了也不可达

排查顺序要反过来:服务在(本机 curl 127.0.0.1:PORT 通)→ uFW/iptables 放行 → 安全组放行 → 外网可用。安全组是最后一道、也最容易被忘的一道。

四、HTTPS:免费证书也能安全合规

证书用自签还是 CA 签发?对外正式站没有悬念:写一本来自 CA、被浏览器信任的证书。备案过的域名可以直接用 Let's Encrypt 的免费证书(见本系列《Let's Encrypt 签发与 Nginx HTTPS 全流程实战》),一句话:certbot certonly --webroot -w /var/www/techpulse -d www.keenth.top → 443 配置 + 强制跳转 + HSTS → deploy-hook 自动续期。核心收益是「信任 + 加密 + 强制 HTTPS」三合一。

要特别提醒的是 HSTS 的绑定副作用:一旦下发 Strict-Transport-Security,浏览器会在缓存期内把这个域名的访问「焊死」在 HTTPS 上。确定不会再切回 HTTP 再加 includeSubDomains,新站建议先短 max-age 灰度。

五、访问日志与审计:上线≠放任不管

上线后第一件事不是庆祝,是把访问日志接进审计。nginx 默认 access_log 只记录原始请求,要做攻击意图识别要自定义 log_format(补真实 IP、耗时、定位),并给每个站配独立日志便于区分站点、单独审计:

log_format techpulse '$remote_addr - [$time_local] "$request" '
                     '$status $body_bytes_sent $request_time';
access_log /var/log/nginx/techpulse.access.log techpulse;

为什么上线当天就配日志:模型上线、攻击识别、限流 fail2ban 闭环的噪声基线越早建立越准,且流量高峰往往就在刚上线的传播期——错过这一期,后续「这是正常流量还是攻击」就难分难解了。日志审计的实现细节可以看本站《日志驱动的安全运营》那一篇。

总结。「上线」不是一个动作,是一条流水线:备案过 → 页脚挂备案号 → DNS 解析(连同 apex)→ 安全组放行 80/443 → HTTPS + 强制跳转 + HSTS → 独立日志接审计。每一环都只要几条命令级别的心智投入,但漏掉任何一环都会在「真正上线那一刻」以最倒霉的方式卡住你——往往是凌晨、外网、手边没有文档的时候。把这份清单存进你的发布 SOP,能少熬夜很多次。
#运维#合规#上线#DNS#HTTPS
广告