使用 CloudFlare 在我的家用计算机上安装多个服务器 运行?

Multiple Servers Running on my Home Computer with CloudFlare?

我有一个家庭服务器,我想在上面托管多个网站。我的家庭服务器的 IP 每隔几个月更改一次,因此我有一个脚本检测 IP 更改并更新我使用新 IP 设置的免费 DNS 提供商。免费的 DNS 是丑陋的。假设它是 ugly.free-dns.com

我有 2 个域(example1.comexample2.com)。我希望 CloudFlare 拥有我的 2 个域名,并在后台将请求路由到我丑陋的域名。

我最初的计划是将 CloudFlare 上的每个 url 分别命名为 ugly.free-dns.com/example1ugly.free-dns.com/example2,然后使用 nginx 反向代理检测路径差异,并路由到正确的本地端口,每个站点将单独托管在 docker 容器中。

我以前从未使用过 cnames(或 nginx),事实证明你不能用路径 cname,这给我的整个计划带来了麻烦。一些研究表明虚拟主机可能是我想要的,但我不确定这将如何与 CloudFlare 一起使用。我发现自己有点不知所措,所以我想我会寻求帮助。

您可以直接使用 CloudFlare API 并避免您的 ugly.free-dns.com 这样每次您的 IP 更改时您都可以直接在 Cloudflare 中更新它,这里是一个基本脚本:

#!/bin/sh

API=<your API key> 
EMAIL=your@email.tld
ZONEID=<your ZONE ID>
RECORDID=<your record ID>
RECORDNAME=www

IP=$(curl -s http://myip.country/ip)

curl -fs -o /dev/null -XPUT "https://api.cloudflare.com/client/v4/zones/$ZONEID/dns_records/$RECORDID" \
  -H "X-Auth-Email: $EMAIL" \
  -H "X-Auth-Key: $API" \
  -H "Content-Type: application/json" \
  --data "{\"type\":\"A\",\"name\":\"$RECORDNAME\",\"content\":\"$IP\",\"ttl\":120,\"proxied\":true}"

然后你只需要配置 Nginx 来处理你的域的所有请求,来自文档:http://nginx.org/en/docs/http/server_names.html

server {
    listen       80;
    server_name  example.org  www.example.org;
    ...
}

server {
    listen       80;
    server_name  *.example.org;
    ...
}

server {
    listen       80;
    server_name  mail.*;
    ...
}

server {
    listen       80;
    server_name  ~^(?<user>.+)\.example\.net$;
    ...
}