1. 构建个人博客方式(任选一种)

下述内容提供从零开始搭建个人博客站点、部署到阿里云 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
2
node -v
npm -v

如未安装:去 nodejs.org 下载 LTS。

2.2 全局安装 Hexo

1
npm install -g hexo-cli

2.3 初始化博客

1
2
3
mkdir myblog && cd myblog
hexo init
npm install

2.4 本地启动预览

1
2
hexo g
hexo s

浏览器访问:http://localhost:4000

博客结构无误即可进入部署环节。


3. 购买并配置阿里云服务器(ECS)

  1. 登录阿里云
  2. 进入 ECS 控制台
  3. 配置参数建议:
    • 系统:Ubuntu 22.04 或 CentOS 7
    • 配置:1 核 2G 足够静态博客
  4. 注意关闭ufw和firewall防火墙,只打开iptables防火墙
  5. 开放以下安全组端口:
    • 22(SSH)
    • 80(HTTP)
    • 443(HTTPS)

4. 把博客部署到服务器(两种方式)

方法 A:直接通过 Nginx 部署静态文件(推荐)

4.1 打包静态文件

本地执行:

1
2
hexo clean
hexo generate

生成的文件在:public/ 文件夹

4.2 把文件上传到服务器

可用 scpWinSCP

1
scp -r public/ root@服务器IP:/var/www/hexo

4.3 安装 Nginx

1
2
sudo apt update
sudo apt install nginx -y

4.4 配置 Nginx 站点

1
sudo vim /etc/nginx/sites-available/blog

写入:

1
2
3
4
5
6
7
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;

root /var/www/hexo;
index index.html;
}

启用配置:

1
2
3
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

浏览器访问服务器 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
2
sudo apt update
sudo apt install snapd -y

安装完成后,启动 snapd:

1
2
sudo systemctl enable snapd
sudo systemctl start 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

根据提示输入:

  1. 邮箱
  2. 是否接受协议
  3. 是否强制 HTTPS(可选 yes)
  4. 自动配置 Nginx

就能完成 SSL + 自动续期。



7. 最终文件结构(参考)

1
2
3
/var/www/hexo/         # 你的博客静态文件
/etc/nginx/sites-available/blog # Nginx 配置
/etc/nginx/sites-enabled/blog # 网站启用的链接

8. 常见问题

可以一步步排,按下面顺序来,基本能定位出问题。


8.0 先弄清楚“具体打不开”的表现

你先自己确认一下(不用回复我也行):

  1. 用浏览器访问:

    • http://服务器IP 能不能打开?
    • http://你的域名 能不能打开?
  2. 是哪种情况:

    • 完全连接不上(浏览器一直转圈 / 连接超时)
    • 提示“无法访问此网站 / 连接被重置”
    • 有 Nginx 默认页面 / 报 403 / 404

下面的排查也是按这个逻辑来。


8.1 确认阿里云安全组放行 80 端口

到阿里云控制台 → ECS → 实例 → 安全组:

  1. 入方向规则中必须有:

    • 端口范围:80/80,协议:TCP,源:0.0.0.0/0
      -(以后弄 HTTPS 再加 443/443
  2. 改完规则后,重新在本地浏览器访问 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
2
sudo systemctl start nginx
sudo systemctl enable nginx

再检查端口:

1
2
3
sudo ss -tlnp | grep 80
# 或
sudo netstat -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
2
3
sudo nginx -s reload
# 或
sudo systemctl restart nginx

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
2
3
sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

CentOS / 阿里云部分镜像

一般在:

1
2
/etc/nginx/conf.d/blog.conf
# 或直接写在 /etc/nginx/nginx.conf 里的 http {} 中

只要在 http {} 里有你的 server { ... } 块,并且 nginx -t 正常就行。

8.4.2 server_name 与访问方式是否匹配

你的配置如果类似:

1
2
3
4
5
6
7
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;

root /var/www/hexo;
index index.html;
}

注意:

  1. 如果你用「IP」访问(http://IP),但 server_name 没有匹配 IP,可能会走别的 server 块。

    • 临时可以改成:
    1
    2
    3
    4
    5
    6
    server {
    listen 80 default_server;
    server_name _;
    root /var/www/hexo;
    index index.html;
    }

    这样无论访问 IP 还是域名都会走它。

  2. 改完再 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
2
3
4
5
index.html
archives/
css/
js/
...

常见错误:

  1. 多了一层目录,如上传到了 /var/www/hexo/public,但 Nginx 写的是 /var/www/hexo

    • 解决:要么改 Nginx root 为 /var/www/hexo/public,要么上传时直接把 public 里的文件传到 /var/www/hexo/
  2. 权限问题(很少见在静态站,但也排一下):

1
2
3
sudo chown -R www-data:www-data /var/www/hexo   # Ubuntu 默认用户
# 或
sudo chown -R nginx:nginx /var/www/hexo # CentOS 常见

然后重启 Nginx。


8.6 如果是用域名访问,检查 DNS 是否正确

在你的本地电脑上(不是服务器)执行:

1
2
nslookup yourdomain.com
nslookup www.yourdomain.com

看返回的 IP 是否是你的 ECS 公网 IP。

常见错误:

  1. 域名解析到旧服务器 / 错误 IP
  2. 只解析了 www,没解析根域名 @(导致访问 yourdomain.com 不行)
  3. 才刚改解析,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 没配”,有两种额外可能:

  1. 之前参考别的教程,加过强制跳转 HTTPS:

    1
    return 301 https://$host$request_uri;

    或者:

    1
    2
    3
    if ($scheme = http) {
    return 301 https://$host$request_uri;
    }

    但你没有配置 443 / 证书,这样浏览器访问 http 会被重定向到 https,结果 https 不通,表现为打不开。

    解决办法:先注释掉所有强制 https 的 return 301 / if ($scheme = http) 相关内容,只保留最基础的 80 端口配置,让站点先在 http 下跑通。

  2. 浏览器曾访问过别的站点 / 旧配置,种了 HSTS,强制用 https 打开这个域名(新域名一般不会,旧域名迁移时可能出现)。
    可以先换浏览器 / 隐私模式 / 换一台设备测试。