Блокировки сервера Nginx: поддомены и пути

Блокировки сервера Nginx: поддомены и пути

В чем разница между поддоменами и путями местоположений?
пример:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

}

или

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }
    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }

}

Очевидно, что уровень разделения отличается: первый разделяется на DNS-серверах, а второй — направление запроса происходит в самом nginx. Мне интересно узнать, какие меры предосторожности следует учитывать при выборе одного решения вместо другого.

решение1

Вы можете указать NGINX отвечать на все запросы по IP-адресу или порту, если хотите. Поддомены/домены в конфигурации просто ограничивают ответы от определенного блока конфигурации «сервера».

Местоположение имеетничегоделать с доменами/поддоменами, за исключением того, что они живут за счет того, что настроено в блоке сервера. Обычно для NGINX первым делом вы настраиваете свои домены и IP для прослушивания, а затем полностью забываете об этом.

Ваш первый пример устанавливает xxxx.yyy.com=>http://127.0.0.1:3000

Второй пример устанавливает yyy.com/xxxx=>http://127.0.0.1:4000

Вы можете объединить пример №1 с примером №2, поместив базовый домен и поддомен в блок сервера №2 (если вас не волнует, что оба пути будут работать как для базового домена, так и для поддомена):


server {

    listen 80 default_server;
    listen [::]:80 default_server;

    server_name yyy.com xxxx.yyy.com;

    location / {

        proxy_pass http://127.0.0.1:3000;

    }

    location /xxxx/ {

        proxy_pass http://127.0.0.1:4000;

    }
}

Итак, вы видите, что нет никакого "разделения в DNS", как вы говорите, если только вы не размещаете их на разных IP-адресах. Единственное разделение у вас в путях.

Объединенный пример дает:

xxxx.yyy.com=>http://127.0.0.1:3000

yyy.com=>http://127.0.0.1:3000

yyy.com/xxxx=>http://127.0.0.1:4000

xxxx.yyy.com/xxxx=>http://127.0.0.1:4000

Поддомены — это не пути. Это совершенно разные вещи. Поэтому попытка сравнить и сопоставить их говорит о том, что вы сильно отклонились от пути в своем понимании.

Возможно, у вас был поддомен где-то в прошлом, где у вас был один каталог для поддомена и другой каталог для основного домена. Это ваши docroots, и это просто способ, которым некоторые веб-серверные административные инструменты настраивают вещи по умолчанию. Нет никакой неотъемлемой связи между поддоменами и путями, если вы (или какой-либо инструмент или системный администратор) не создаете ее.

Вы можете сопоставить любой домен или поддомен (или любой путь, указанный вами в блоке расположения) с любым желаемым вами путем в вашей файловой системе.

Местоположение — это все о ПУТЯХ... и здесь снова, после того как NGINX нашел запрос, соответствующий блоку сервера, он отслеживает запросы, соответствующие пути в HTTP-запросе.

/thispath /thatpath /foo /bar или /foo/bar/on/thatpath или вы можете использовать подстановочные знаки и регулярные выражения. Вы можете настроить различные расширения файлов для обслуживания из разных каталогов, или обычное использование location — указать NGINX, как обрабатывать определенные типы файлов, например PHP.

Здесь приведено несколько примеров конфигураций:http://nginx.org/en/docs/beginners_guide.html

Если вы найдете это полезным, пожалуйста, поставьте лайк или отметьте как решение. Спасибо!

решение2

Поскольку тема касается конфигурации nginx, то нет разделения на уровне dns, если оба домена указывают на один и тот же IP/сервер.
Разница в том, какие домены какие пути доступны/обрабатываются.
Вы можете настроить несколько доменов с одинаковыми расположениями, но один домен будет отличаться. Это основное применение server_name.

locationблоки — это часть URL после доменного имени/IP.
http://www.example.com/location/ Вы можете сделать различные локальные пути доступными в различных блоках/URL-адресах местоположений.

То, чего вы можете достичь с помощью dns, отличается от конфигурации nginx.
DNS round robin делает возможными балансировку нагрузки и высокую доступность.
Разрешение на основе геолокации позволяет ускорить доставку контента.

На самом деле все зависит от того, чего вы хотите добиться.

Связанный контент