Jack's Space

如何薅一台服务器并狠狠压榨? (第二部分)

字数统计: 1.7k阅读时长: 7 min
2024/05/19
loading

第二部分 - 域名与站点

嗨嗨! 这篇文章分享如何低价获得域名, 创建自己的站点!

欸你说没有服务器? 请参考第一部分: 跳转到第一部分.

几个问题

为啥需要域名?
当我们访问网页的时候, 实际上是通过HTTP协议访问80端口, 那么服务器怎么知道你需要访问哪个服务呢?
如果我们有域名, 可以通过多个子域名(例如a.domain.comb.domain.com来区分各个网站), 服务器通过分流工具 (例如Traefik/Nginx/Apache等) 决定向你展示哪个网站.
而且, 比起使用 IP 地址访问 (最初的98), 有一个域名可以更好地记忆, 还可以作为独特的个人邮箱 (例如[email protected])

付费还是白嫖?
白嫖很不错, 但在域名上花点小米可能是需要的~
这是因为免费的域名可能存在以下问题:

  • 目前大多数可白嫖域名都是二级域名, 或只有一年有效期.
  • 无法设置企业邮箱.
  • 在微信显示为不良网站.
  • 可能存在不稳定的情况.
    为了避免你搞了半天气到爆炸, 推荐还是付费买便宜的域名啦~

买多久?
域名是按年购买的, 没有永久的~
如果你只是临时起意, 推荐使用腾讯云/阿里云的首年优惠域名.
如果你可能要长期使用, 更推荐买便宜域名 10 年哦.
(这是因为域名续费价格比新购更贵, 而且有长期域名后用作个人邮箱更心安)

主要的域名购买渠道

Option 1. 腾讯云 / 阿里云

阿里云腾讯云是国内的主要域名注册渠道.

如果你不需要一个长期的域名, 我推荐看看腾讯云的新人页面阿里云的新人页面, 领取首年 1 元的域名, 基本足够使用啦.

如果你需要长期使用, 可以选择一些小众域名后缀, 200 元左右拿下 10 年域名:
阿里云: .top(188) / .fun(188) / .tech(199) / .space(188)
腾讯云: .site(178) / .tech(195) / .online(175)
以上价格可能随时间变动, 双十一等消费节时也可能会有活动, 可以蹲一蹲看看: 腾讯云的活动页面阿里云的活动页面.

Option 2. 其他可能更便宜的国外域名商

从国外域名商购买, 无需实名认证, 且对于.com / .net 等出名的域名可能更加便宜. (可以通过哪煮米进行比价)
各位前辈可以自行研究~

Option 3. 白嫖!

很可惜, 目前可以白嫖的大多数是一级域名一年(例如 Namecheap 学生计划), 或是二级域名, 因此不太推荐白嫖哦.
如果有需要, 可以访问以下资讯站: 如有乐享

链接各个子域名

当你购买了域名以后, 如何让它链接你的服务器呢?
你需要理解域名的工作原理!

图 0

有一天, 你打开了一个奇怪的站点:

  1. 你的电脑会查询 DNS 服务器;
  2. DNS 服务器会去问你的域名注册商;
  3. 域名注册商会去询问你设置的 NS 服务器;
  4. 最后 NS 服务器返回实际的地址.

这里, 我们使用 Cloudflare 作为 NS 服务器:

  1. 首先注册登录 Cloudflare, 点击 Add a site, 输入你刚刚注册的域名(例如domain.com):

    图 1

  2. 然后选择 Free Plan, 显示需要更改 Nameserver 服务器:

    图 2

  3. 进入域名注册商网页, 找到更改 Nameserver 服务器地址的地方, 例如腾讯云:

    图 3

  4. 修改后等待几个小时, 如下警告消失, 说明 Cloudflare 已经成功链接了你的域名:

    图 4

  5. 进入 Cloudflare 中的 DNS 设置界面:

    图 5

    这里我们可以增加各个子域名, 例如我的域名是 domain.com, 要增加一个名为 blog.domain.com 的子域名, 需要增加一个 A 类型的解析记录, Name 为 blog, 地址为你的服务器地址. 最后的 Proxied 代表使用 Cloudflare 的 CDN, 这个如果你的服务器在国外推荐开启, 国内开启可以隐藏服务器 IP 避免攻击, 但会显著降低连接速度.

如何让你的服务器识别各个子域名并启用 HTTPS

这里我们一般使用 Docker 来运行各个子站点, 使用 Docker Compose 管理所有服务.

  1. 创建一个 traefik 文件夹, 并放入以下配置文件:

    dynamic.yml:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    http:
    routers:
    all-https:
    rule: "HostRegexp(`{host:.+}`)"
    entryPoints:
    - web
    tls: true
    middlewares:
    - to-https
    priority: 1000
    middlewares:
    to-https:
    redirectScheme:
    scheme: https

    static.yml:

    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
    log:
    level: DEBUG
    filePath: "/var/log/traefik.log"
    #accessLog:
    # filePath: "/var/log/access.log"
    # format: json
    api:
    dashboard: true
    entryPoints:
    web:
    address: ":80"
    websecure:
    address: ":443"
    http:
    tls:
    certResolver: le-dns
    domains:
    - main: domain.com
    sans:
    - "*.domain.com"
    providers:
    docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
    network: web
    defaultRule: Host(`{{if index .Labels "com.docker.compose.service" }}{{ index .Labels "com.docker.compose.service" }}.domain.com{{else}}{{ trimPrefix `/` .Name }}.domain.com{{end}}`)
    file:
    filename: "/etc/traefik/dynamic.yml"
    certificatesResolvers:
    le-dns:
    acme:
    storage: "/acme.json"
    email: [email protected]
    dnsChallenge:
    provider: cloudflare

    (请将上述文件中的 4 处 domain.com 替换为你的域名)

  2. 进入 Cloudflare 控制台, 进入 My Profile 中的 API Tokens, 创建一个 Token, 需要在 All zones 具有 Zone.Zone, Zone.DNS 权限, 完成后复制Token.

    图 6

    图 7

  1. 创建一个 .env 文件夹, 并放入以下密钥文件:

    traefik.env:

    1
    2
    CF_API_EMAIL=你的Cloudflare账户邮箱
    CF_API_KEY=你复制的 API Token
  2. 创建一个 docker-compose.yml 文件:

    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
    version: '3.9'
    services:
    qinglong:
    image: whyour/qinglong
    container_name: qinglong
    restart: unless-stopped
    volumes:
    - ./qinglong:/ql/data:rw
    labels:
    - traefik.enable=true
    - traefik.http.routers.qinglong.rule=Host(`ql.domain.com`)
    - traefik.http.services.qinglong.loadbalancer.server.port=5700

    traefik:
    container_name: traefik
    image: traefik
    restart: unless-stopped
    ports:
    - 80:80
    - 443:443
    security_opt:
    - no-new-privileges:true
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro
    - ./traefik/static.yml:/traefik.yml:ro
    - ./traefik/dynamic.yml:/etc/traefik/dynamic.yml:ro
    - ./traefik/acme.json:/acme.json:rw
    - ./traefik/traefik.log:/var/log/traefik.log:rw
    - ./traefik/access.log:/var/log/access.log:rw
    - /etc/localtime:/etc/localtime:ro
    env_file:
    - ./.env/traefik.env
    labels:
    - traefik.enable=true
    - traefik.http.routers.traefik.service=api@internal
    - traefik.http.routers.traefik.middlewares=user-auth@file
    networks:
    web:
    name: web

    这里, 对于每个服务, 可以在 label 中 使用如下设置:

    • 使用 traefik.enable=true 表示该服务需要链接子域名.
    • 使用 traefik.http.routers.服务名.rule=Host(子域名) 指定该服务需要链接的子域名 (不指定默认为 服务名.域名).
    • 使用 traefik.http.services.服务名.loadbalancer.server.port=容器内的HTTP端口 指定端口.
  3. docker-compose.yml 的同级目录, 执行 docker-compose up -d, 以启动服务.

  4. 访问你设定的子域名 (例如 sign.domain.com), 应该可以看到你的网站已经成功运行了!

接下来…

呼! 终于完成了部署, 现在你可以拥有各式各样的网站和服务了.
第三部分将分享如何狠狠压榨你的服务器: 跳转到第三部分

CATALOG
  1. 1. 第二部分 - 域名与站点
  2. 2. 几个问题
  3. 3. 主要的域名购买渠道
    1. 3.1. Option 1. 腾讯云 / 阿里云
    2. 3.2. Option 2. 其他可能更便宜的国外域名商
    3. 3.3. Option 3. 白嫖!
  4. 4. 链接各个子域名
  5. 5. 如何让你的服务器识别各个子域名并启用 HTTPS
  6. 6. 接下来…