Несколько серверов, запущенных на моем домашнем компьютере с CloudFlare? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть домашний сервер, на котором я хочу разместить несколько веб-сайтов.IP-адрес моего домашнего сервера меняется один раз в несколько месяцев, поэтому у меня есть сценарий обнаружения изменений IP-адресов, который обновляет бесплатного провайдера DNS, который я настраиваю с новым IP-адресом.Свободный днс безобразен.Допустим, это ugly.free-dns.com

У меня есть 2 домена (example1.com и example2.com).Я хочу, чтобы CloudFlare владела двумя моими доменными именами, и перенаправляю запросы на мое уродливое доменное имя под капотом.

Первоначально я планировал присвоить каждому из URL-адресов на CloudFlare ugly.free-dns.com/example1 и ugly.free-dns.com/example2соответственно, а затем используйте обратный прокси-сервер nginx для обнаружения различий в путях и маршрутизации на правильные локальные порты, где каждый сайт будет размещаться отдельно в контейнере Docker.

Я никогда не использовал cnames (илиnginx), и оказывается, что вы не можете назвать путь, который бросает гаечный ключ во весь мой план.Некоторые исследования показывают, что виртуальные хосты могут быть тем, что я хочу, но я не уверен, как это будет работать с CloudFlare.Я чувствую себя немного над головой, так что я подумал, что попросить о помощи.

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете использовать 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$;
    ...
}
...