网站迁移

网站迁移

到1月10日网站的 ecs 云主机就要到期了;

看了一下控制台,续费一年的话可以打3折,只要250¥,
于是去首页看了一下,新购一台同等配置的才99¥,当然选择新购了;

于是今天加班回来后,花了一个半小时完成了迁移

记录一下主要流程,后面补充细节

  1. 控制台新购一台云主机
  2. 控制台重置密码
  3. 操作系统基础配置
  4. 拉取nginx镜像, 上传站点静态文件
  5. 添加 ipv6 支持
  6. 更新 dns 记录
  7. 更新 https 证书; 包括 (www 和 blog) 的 2 个 证书

操作系统基础配置

  1. yum update 更新全部包后重启
  2. 添加 docker-ce 官方源, 然后安装 docker
  3. 放置 ssh key, 并禁止密码登陆, 设置允许 root 用户远程登陆(仅允许key方式), 修改 ssh端口号

过程中的问题

1. ipv6

主机设置 ipv6 地址后, 公网ping不通,排查了主机设置很久后都没有结果。
然后就去控制台上找,才发现每个v6地址都需要单独开通公网服务,而且是需要单独付费的;

这里我的排查干扰是当我拿新的主机v6配置去比对旧主机的配置时,发现有点不一样,以为是这个问题导致的,结果是干扰。还是不能自以为是,要从全流程的角度看。

详情可以参考我以前的一篇文章
记录阿里云站点开启ipv6的步骤

2. https 证书问题

原本阿里云的免费证书有效期是一年的,但这次更新才发现去年11月后调整了政策,只能给3个月的证书了;
我决定后面另外找一个免费证书机构, 支持泛域名或一年有效期,这两个肯定得有一个;
实在不行也得弄个 ACEM 那种自动续订证书的;

3. wireguard 隧道

我以前是用 ecs 对 家里的主机做了内网穿透,网站其是是放在内网家里的;
这个 ecs 实质只起到一个流量转发的作用;

后来发现有些漏扫和攻击也引到家庭网了,于是在 ecs 放置了一个 nginx 做一些基础拦截,只转发有效流量;

但是因为我最近多次搬家,每次搬为了不停服(重视),都需要将在线的部分(就这个站点),先迁移到云上来,然后搬家完后再迁下来,费力。

隔段时间可能还会搬家,所以这段时间就不转去内网了,也就不配 WG 隧道了;
家庭网的入口从另一个腾讯云的服务器单独走;

当前阶段的 nginx 配置

docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
services:
  nginx:
    restart: always
    # image: nginx:1.24.0
    image: nginx:1.25.3-alpine
    network_mode: host
    command:
      ["nginx", "-g", "daemon off;"]
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./blog.conf:/etc/nginx/blog.conf:ro
      - /home/wait/data:/data
      - ./cert:/cert
    environment:
      NGINX_ENTRYPOINT_QUIET_LOGS: off

nginx.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
worker_processes  1;

error_log  /dev/stderr;
#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server_tokens off;

    log_format  main 'ecs:$hostname:$server_port:$msec:$connection:$connection_requests '
            '$request_id '
            '[$time_iso8601] $status $request_time $bytes_sent $body_bytes_sent '
            '"$remote_addr" "$http_x_forwarded_for" '
            '"$upstream_addr" "$upstream_status" "$upstream_response_time" '
            '$request_length "$content_length" "$host" "$http_host" '
            '"$server_protocol" "$request_method" "$request_uri" "$http_referer" '
            '"$http_content_type" "$http_user_agent" "$request_body"';

    access_log  /dev/stdout  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    server {
        listen 172.17.8.148:80;
        listen [::]:80;

        location / {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 172.17.8.148:443 ssl default_server;
        listen [::]:443 ssl default_server;
        http2 on;
        server_name  chenwx.top;
        ssl_certificate         /cert/www.chenwx.top.pem;
        ssl_certificate_key     /cert/www.chenwx.top.key;
        include blog.conf;
    }


    server {
        listen 172.17.8.148:443 ssl;
        listen [::]:443 ssl;
        http2 on;
        server_name  blog.chenwx.top;
        ssl_certificate         /cert/blog.chenwx.top.pem;
        ssl_certificate_key     /cert/blog.chenwx.top.key;
        include blog.conf;
    }
}

blog.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
ssl_session_timeout 30m;
ssl_session_cache shared:MozSSL:1m;
ssl_session_tickets off;

ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;

gzip on;
gzip_min_length   20k;
gzip_comp_level   2;
gzip_buffers      16 32k;
gzip_types text/plain text/css text/javascript application/javascript;

# 拦截非 get-post 请求
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 404;
}

# 拦截非 主站 请求
if ( $host !~ ^(chenwx.top|www.chenwx.top|blog.chenwx.top)$ ){
    return 404;
}

error_page 404 /404.html;

location = /health {
    access_log off;
    return 200 "ok";
}

location / {
    root /data/blog;
    index index.html;
}

location ^~ /tools/ {
    root /data;
    index index.html;

    try_files $uri @route;
}

location @route {
    rewrite ^.*$ /tools/index.html last;
}

location ^~ /files/ {
    root /data;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
}

location = /files/ {
    root /data;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    sub_filter '<a href="../">../</a>' '';
}

location ~* ^.+\.(jpg|gif|png|mp3|zip)$ {
    root /data/blog;
    expires              3d;
}
Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2024-01-07 00:00 UTC