Несколько серверов, запущенных на моем домашнем компьютере с CloudFlare?

#nginx #dns #cloudflare #nginx-reverse-proxy

#nginx #dns #cloudflare #nginx-обратный прокси

Вопрос:

У меня есть домашний сервер, на котором я хочу разместить несколько веб-сайтов. IP-адрес моего домашнего сервера меняется раз в несколько месяцев, поэтому у меня есть скрипт, обнаруживающий изменения IP-адреса и обновляющий бесплатного DNS-провайдера, который я настраиваю, на новый IP-адрес. Бесплатный dns уродлив. Допустим, что это 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), и оказалось, что вы не можете использовать cname с помощью path, что нарушает весь мой план. Некоторые исследования показывают, что виртуальные хосты могут быть тем, что мне нужно, но я не уверен, как это будет работать с CloudFlare. Я немного запутался, поэтому решил попросить помощи.

Ответ №1:

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

Комментарии:

1. Я не понимаю, как server_name перенаправляет запрос в нужный контейнер docker. Должна быть какая-то маршрутизация к определенному порту.