Я получил свой локальный nginx, обслуживающий 3 сайта, с соответствующими конфигурациями ниже. Они хорошо работали таким образом в моей локальной сети (см. Ниже также конфигурацию dnsmasq), когда запросили А или A. домен. Теперь я хотел, чтобы один из этих сайтов был доступен из Интернета через домен dyndns, например B.domain.ddns.net.
Я настроил свой маршрутизатор на переадресацию порта 81 (чтобы случайно не замаскировать интерфейс администратора маршрутизатора) на порт 80 моего локального сервера и добавил строки, закомментированные в настоящее время в приведенных ниже примерах, за исключением строки default_server.
Я вошел http://B.domain.ddns.net:81 как URL. Это не сработало.
Я предположил, что, возможно, субдомен каким-то образом не работает с системой dyndns, поэтому я дополнительно установил один сайт на default_server
.
Теперь, когда сайт стал доступен из Интернета, но внезапно один из других сайтов больше не доступен локально, ни с C ни C. домен, вместо этого используется значение по умолчанию.
Кто-нибудь знает, почему это происходит? Или почему домен dyndns вообще не совпадает? Или как я могу настроить журнал доступа, чтобы показывать запрашиваемый сайт со строкой домена? Или, может быть, есть лучший способ обслуживать только один сайт в Интернете, а другие локально?
Сайт А
server {
listen 80;
listen [::]:80;
server_name A.domain, A;
...
Сайт B
server {
listen 80;
# used this instead of previous line after specific domain below didn't work
# listen 80 default_server;
listen [::]:80;
server_name B.domain, B;
#used this instead of previous for external access
# server_name B.domain, B, B.domain.ddns.net;
...
Сайт C
server {
listen 80;
server_name C, C.domain;
dnsmasq-config
strict-order
local=/heimatsender/
expand-hosts
domain=heimatsender
log-queries
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,168h
log-dhcp
dhcp-option=option:router,192.168.1.1
dhcp-hostsfile=/etc/dnsmasq-dhcphosts
dhcp-option=15,"domain"
dhcp-option=6,192.168.1.18
cname=A.domain,A
cname=A.domain.domain,A.domain
cname=Aalias,A
cname=Aalias.domain,A.domain
cname=C,A
cname=C.domain,A.domain
cname=B,A
cname=B.domain,A.domain
Обновить Удаление запятых в поле server_name снова сделало сайты доступными из локальной сети. Но из интернета только domain.ddns.net:81
работает для подключения к сайту, настроенному как default server
. B.domain.ddns.net:81
нет, хотя настроен как server_name
. Дополнительная помощь все еще приветствуется.
В server_name
является точным совпадением, если вы не используете подстановочные знаки или синтаксис регулярных выражений. Видеть этот документ для подробностей.
Домен B.domain.ddns.net
не соответствует ни одному из ваших существующих server_name
выражений, поэтому вместо них будет использоваться сервер по умолчанию.
Если нет listen
директива с default_server
модификатор, первый server
блок (с совпадающим IP: PORT) будет использоваться. Не зная порядка загрузки вашей конфигурации, мы не знаем, какой именно (возможно, сайт C, так как он загадочным образом перестал работать). Использовать nginx -T
чтобы увидеть всю конфигурацию, прочитанную nginx
.
В строке нет разделителя запятой. server_name
директива. Утверждение вашего сайта B, возможно, должно быть:
server_name B.domain.ddns.net B.domain B;