下述内容提供从零开始搭建个人博客站点、部署到阿里云 ECS 服务器、并进行域名绑定 + HTTPS 配置的完整流程。步骤清晰、可直接照做。
1. 构建个人博客方式(任选一种)
常见三种方式:
方案 A:静态博客(推荐,简单稳定)
典型工具:Hexo、Hugo、VuePress、Jekyll
优点:轻量、速度快、安全性高、维护简单。
缺点:需要 Markdown 写作,不适合做太复杂的功能。
方案 B:动态博客
WordPress、Halo、Typecho 等。
优点:有后台、可视化编辑、插件丰富。
缺点:需要服务器长期运行,运维成本更高。
方案 C:自建框架(Django、Flask、Node.js…)
适合开发者做个性化定制。
以下教程以开发者最常用的 Hexo 静态博客 为例,但后面部署 & 域名流程对所有方案都适用。
2. 在本地创建 Hexo 博客
2.1 安装 Node.js
1 | node -v |
如未安装:去 nodejs.org 下载 LTS。
2.2 全局安装 Hexo
1 | npm install -g hexo-cli |
2.3 初始化博客
1 | mkdir myblog && cd myblog |
2.4 本地启动预览
1 | hexo g |
浏览器访问:http://localhost:4000
博客结构无误即可进入部署环节。
3. 购买并配置阿里云服务器(ECS)
- 登录阿里云
- 进入 ECS 控制台
- 配置参数建议:
- 系统:Ubuntu 22.04 或 CentOS 7
- 配置:1 核 2G 足够静态博客
- 注意关闭ufw和firewall防火墙,只打开iptables防火墙
- 开放以下安全组端口:
- 22(SSH)
- 80(HTTP)
- 443(HTTPS)
4. 把博客部署到服务器(两种方式)
方法 A:直接通过 Nginx 部署静态文件(推荐)
4.1 打包静态文件
本地执行:
1 | hexo clean |
生成的文件在:public/ 文件夹
4.2 把文件上传到服务器
可用 scp 或 WinSCP:
1 | scp -r public/ root@服务器IP:/var/www/hexo |
4.3 安装 Nginx
1 | sudo apt update |
4.4 配置 Nginx 站点
1 | sudo vim /etc/nginx/sites-available/blog |
写入:
1 | server { |
启用配置:
1 | sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/ |
浏览器访问服务器 IP,应该能看到博客页面。
方法 B:使用 Git 自动部署(更适合开发者)
配置 git hook,当你 push 时自动更新站点。若需要我可提供完整 CICD 配置。
5. 域名购买与解析(阿里云)
5.1 购买域名
阿里云域名控制台购买。
5.2 进行 DNS 解析
进入域名 → “解析设置” → 添加两条记录:
| 类型 | 主机记录 | 记录值 |
|---|---|---|
| A | @ | 你的服务器公网 IP |
| A | www | 你的服务器公网 IP |
等待 1~10 分钟生效。
此时访问:
1 | http://yourdomain.com |
若能打开博客,说明解析成功。
6. 配置 HTTPS(免费证书)
6.1 安装 snapd(如果系统还未安装)
执行:
1 | sudo apt update |
安装完成后,启动 snapd:
1 | sudo systemctl enable snapd |
有些系统还需要:
1 | sudo ln -s /var/lib/snapd/snap /snap |
确认 snap 是否正常:
1 | snap --version |
6.2 用 snap 安装 certbot
1 | sudo snap install --classic certbot |
安装完后创建软链接(让 certbot 直接可用):
1 | sudo ln -s /snap/bin/certbot /usr/bin/certbot |
确认 certbot 是否可用:
1 | certbot --version |
6.3 一键自动生成 HTTPS 证书并配置 Nginx
1 | sudo certbot --nginx |
根据提示输入:
- 邮箱
- 是否接受协议
- 是否强制 HTTPS(可选 yes)
- 自动配置 Nginx
就能完成 SSL + 自动续期。
7. 最终文件结构(参考)
1 | /var/www/hexo/ # 你的博客静态文件 |
8. 常见问题
可以一步步排,按下面顺序来,基本能定位出问题。
8.0 先弄清楚“具体打不开”的表现
你先自己确认一下(不用回复我也行):
用浏览器访问:
http://服务器IP能不能打开?http://你的域名能不能打开?
是哪种情况:
- 完全连接不上(浏览器一直转圈 / 连接超时)
- 提示“无法访问此网站 / 连接被重置”
- 有 Nginx 默认页面 / 报 403 / 404
下面的排查也是按这个逻辑来。
8.1 确认阿里云安全组放行 80 端口
到阿里云控制台 → ECS → 实例 → 安全组:
入方向规则中必须有:
- 端口范围:
80/80,协议:TCP,源:0.0.0.0/0
-(以后弄 HTTPS 再加443/443)
- 端口范围:
改完规则后,重新在本地浏览器访问
http://服务器IP再试一次。
如果安全组没开,外面根本连不到你服务器。
8.2 服务器自己能不能访问 Nginx
SSH 登录服务器,执行:
1 | curl http://127.0.0.1 |
- 如果有 HTML 输出(一长串
<html>...</html>),说明 Nginx 在本机是通的,问题在「外网访问/安全组/DNS」。 - 如果这里都访问不了,说明 Nginx 本身有问题,继续下面步骤。
8.3 检查 Nginx 是否在运行并监听 80 端口
1 | sudo systemctl status nginx |
看是否是 active (running):
如果不是 running:
1 | sudo systemctl start nginx |
再检查端口:
1 | sudo ss -tlnp | grep 80 |
应该能看到类似:
1 | LISTEN 0 128 0.0.0.0:80 ... nginx |
如果 80 没在监听:
- 多半是 Nginx 配置有错误:继续第 4 步。
8.4 检查 Nginx 配置是否正常加载
先检查语法:
1 | sudo nginx -t |
- 正常应输出:
syntax is ok/test is successful - 如果报错,会告诉你哪一行出问题,如:
/etc/nginx/sites-enabled/blog:12
按照提示修改配置后,再:
1 | sudo nginx -s reload |
8.4.1 确认你配置的这个 server 块真的被启用
常见两种情况:
Ubuntu / Debian 系列
配置在:
1 | /etc/nginx/sites-available/blog |
必须有软链接到:
1 | /etc/nginx/sites-enabled/blog |
命令:
1 | ls -l /etc/nginx/sites-enabled/ |
如果没有:
1 | sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/ |
CentOS / 阿里云部分镜像
一般在:
1 | /etc/nginx/conf.d/blog.conf |
只要在 http {} 里有你的 server { ... } 块,并且 nginx -t 正常就行。
8.4.2 server_name 与访问方式是否匹配
你的配置如果类似:
1 | server { |
注意:
如果你用「IP」访问(http://IP),但
server_name没有匹配 IP,可能会走别的 server 块。- 临时可以改成:
1
2
3
4
5
6server {
listen 80 default_server;
server_name _;
root /var/www/hexo;
index index.html;
}这样无论访问 IP 还是域名都会走它。
改完再
sudo nginx -t && sudo systemctl reload nginx
8.5 检查站点根目录和文件
确保 Nginx 指向的是你上传 Hexo public 的目录。
假设你配置的是:
1 | root /var/www/hexo; |
那目录内必须有 index.html:
1 | ls -l /var/www/hexo |
应该看到:
1 | index.html |
常见错误:
多了一层目录,如上传到了
/var/www/hexo/public,但 Nginx 写的是/var/www/hexo- 解决:要么改 Nginx root 为
/var/www/hexo/public,要么上传时直接把public里的文件传到/var/www/hexo/
- 解决:要么改 Nginx root 为
权限问题(很少见在静态站,但也排一下):
1 | sudo chown -R www-data:www-data /var/www/hexo # Ubuntu 默认用户 |
然后重启 Nginx。
8.6 如果是用域名访问,检查 DNS 是否正确
在你的本地电脑上(不是服务器)执行:
1 | nslookup yourdomain.com |
看返回的 IP 是否是你的 ECS 公网 IP。
常见错误:
- 域名解析到旧服务器 / 错误 IP
- 只解析了
www,没解析根域名@(导致访问yourdomain.com不行) - 才刚改解析,DNS 还没完全生效(等几分钟~半小时)
确保在阿里云「域名解析」里有类似:
| 记录类型 | 主机记录 | 记录值(IP) |
|---|---|---|
| A | @ | ECS 公网 IP |
| A | www | ECS 公网 IP |
8.7 查看 Nginx 日志定位错误
如果上述都看着没问题,但还是打不开,日志最关键。
8.7.1 查看错误日志
1 | sudo tail -n 50 /var/log/nginx/error.log |
看有没有:
- 权限问题(
permission denied) - 文件不存在(
No such file or directory) - 配置问题
8.7.2 查看访问日志
1 | sudo tail -n 50 /var/log/nginx/access.log |
看你访问时是否有一行 GET / ... 的记录:
- 如果连访问记录都没有:说明请求压根没到服务器(多半是安全组 / DNS 问题)
- 有访问记录但返回
404/403/301/302等,就按状态码找原因
8.8 可能和“HTTPS 未配置”相关的情况
你说“只有 HTTPS 没配”,有两种额外可能:
之前参考别的教程,加过强制跳转 HTTPS:
1
return 301 https://$host$request_uri;
或者:
1
2
3if ($scheme = http) {
return 301 https://$host$request_uri;
}但你没有配置 443 / 证书,这样浏览器访问 http 会被重定向到 https,结果 https 不通,表现为打不开。
解决办法:先注释掉所有强制 https 的
return 301/if ($scheme = http)相关内容,只保留最基础的 80 端口配置,让站点先在 http 下跑通。浏览器曾访问过别的站点 / 旧配置,种了 HSTS,强制用 https 打开这个域名(新域名一般不会,旧域名迁移时可能出现)。
可以先换浏览器 / 隐私模式 / 换一台设备测试。