使用 CloudFlare 在我的家用计算机上安装多个服务器 运行?
Multiple Servers Running on my Home Computer with CloudFlare?
我有一个家庭服务器,我想在上面托管多个网站。我的家庭服务器的 IP 每隔几个月更改一次,因此我有一个脚本检测 IP 更改并更新我使用新 IP 设置的免费 DNS 提供商。免费的 DNS 是丑陋的。假设它是 ugly.free-dns.com
我有 2 个域(example1.com
和 example2.com
)。我希望 CloudFlare 拥有我的 2 个域名,并在后台将请求路由到我丑陋的域名。
我最初的计划是将 CloudFlare 上的每个 url 分别命名为 ugly.free-dns.com/example1
和 ugly.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$;
...
}
我有一个家庭服务器,我想在上面托管多个网站。我的家庭服务器的 IP 每隔几个月更改一次,因此我有一个脚本检测 IP 更改并更新我使用新 IP 设置的免费 DNS 提供商。免费的 DNS 是丑陋的。假设它是 ugly.free-dns.com
我有 2 个域(example1.com
和 example2.com
)。我希望 CloudFlare 拥有我的 2 个域名,并在后台将请求路由到我丑陋的域名。
我最初的计划是将 CloudFlare 上的每个 url 分别命名为 ugly.free-dns.com/example1
和 ugly.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$;
...
}