Как установить IP-адрес в директиве server_name, не имя домена?

По какой-то причине NGINX не работает, если я установил пустой IP-адрес в директиве имя_сервера :

server {
    listen 80;
    server_name xx.xx.xxx.xx; # doesn't work

server {
    listen 80;
    server_name ec2-xx-xx-xxx-xx.ap-southeast-2.compute.amazonaws.com; # this works fine

Почему NGINX не принимает IP-адрес? Как заставить его принимать IP-адреса?

Я использую динамический DNS с моим регистратором доменных имен (namecheap, если быть точным), и у меня есть запись «A», которая сопоставляет мое общедоступное доменное имя с экземпляром AWS EC2:

enter image description here

Итак, когда я перехожу на example.com , я перенаправляюсь в приложение экземпляра EC2. Однако я вижу целевую страницу NGINX по умолчанию вместо целевой страницы моего приложения. NGINX не передает запрос дальше в Node.js.

3
задан 26 July 2016 в 08:38
4 ответа

Если у вас настроен только один сайт, вы можете попробовать использовать это в конфигурации nginx:

server_name _;

If заставит server принять все HTTP-запросы, независимо от заголовка Host .

5
ответ дан 3 December 2019 в 04:41

Пробовали ли вы использовать example.com вместо IP-адреса?

По крайней мере, с Apache, весь смысл поля server_name состоит в том, чтобы разрешить нескольким веб-сайтам (пространствам имен) обслуживаться с одного IP-адреса. Клиент, следующий за « http://example.com », выполняет поиск в DNS и отправляет запрос на IP-адрес, полученный в результате поиска в DNS, но включает в запрос «example.com», поэтому что веб-сервер (NGINX) может определить, к какому веб-сайту принадлежит запрос.

6
ответ дан 3 December 2019 в 04:41

Этот вопрос показывает неправильное понимание цели объявления server_name. Среди серверов распространена возможность указывать IP-адреса интерфейсов, на которых вы хотите создать прослушивающий сокет. Однако с NGINX это не достигается с помощью директивы server_name.

Чтобы понять директиву server_name, вы должны понимать часть протокола HTTP. Когда ваш веб-браузер делает HTTP-запрос на веб-сайт, например, переполнение стека https://serverfault.com/questions заставляет ваш веб-браузер искать serverfault.com в DNS для получения IP-адреса - Вот почему вам нужна запись DNS.

Как только ваш веб-браузер получает IP-адрес, он открывает TCP-соединение с портом 80 на этом IP-адресе. Затем веб-браузер должен сообщить веб-серверу, какая страница запрашивается. Это делается с помощью протокола HTTP. Первая строка запроса будет такой:

GET / questions HTTP / 1.1

Это указывает серверу путь URL и версию HTTP, которую клиент использует для связи.

Вторая строка:

Host: serverfault.com

Это называется заголовком HTTP, и заголовок Host сообщает веб-серверу, какой веб-сайт должен обрабатывать запрос. Когда на сервере размещается только один веб-сайт, это, вероятно, кажется излишним. Но часто веб-серверы обрабатывают множество веб-сайтов.

Это соответствует директиве nginx server_name. Эта директива указывает nginx использовать этот сайт nginx только тогда, когда заголовок Host соответствует этой строке.

Итак, чтобы ответить на ваш вопрос, нет смысла устанавливать IP-адрес в директиве server_name. Было бы более нормальным зарегистрировать доменное имя, а затем создать запись DNS CNAME для ссылки на DNS-имя серверов AWS. Когда вы запускаете замещающий сервер, обновите CNAME, чтобы указать на новое DNS-имя сервера.

Профессиональный веб-сайт будет размещен за эластичным балансировщиком нагрузки, который затем поддерживает постоянное DNS-имя, на которое вы можете ссылаться с вашей записью DNS. .

4
ответ дан 3 December 2019 в 04:41

Я новичок в NGINX, но согласно официальным документам ( https://nginx.org/en/docs/http/server_names.html ) это допустимо для использования числового IP-адреса:

«Если кто-то делает запрос, используя IP-адрес вместо имени сервера, поле заголовка запроса« Хост »будет содержать IP-адрес, и запрос может быть обработан с использованием IP-адреса в качестве имя сервера:

server {
          listen       80;
           server_name  example.org
           www.example.org
           ""
           192.168.1.1
           ;
    ...
}

Это имеет смысл сделать, если вы контролируете записи DNS своего IP-адреса

0
ответ дан 3 December 2019 в 04:41

Теги

Похожие вопросы