#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. Должна быть какая-то маршрутизация к определенному порту.