Назад | Перейти на главную страницу

Почему маскировка nginx default_server лучше подходит?

Я получил свой локальный 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;