// EDIT: это мой локальный сервер разработки
У меня есть встроенный сервер PHP, работающий на порту 8000 для хоста somehost.dev
. Я хочу, чтобы nginx проксировал somehost.dev
с порта 80 на порт 8000. Моя конфигурация:
server {
listen 80;
server_name *.dev;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://$host:8000$uri;
proxy_redirect off;
}
}
Возникает ошибка:
[error] 30106#0: *1 no resolver defined to resolve somehost.dev, client: 127.0.0.1, server: *.dev, request: "GET /favicon.ico HTTP/1.1", host: "somehost.dev", referrer: "http://somehost.dev/admin"
Что я делаю не так?
решение1
Добавьте resolver 127.0.0.1;
в свою конфигурацию, заменив 127.0.0.1 на ваш DNS-сервер(ы) в вашей настройке, если вы не используете DNS локально.
Информация о преобразователе Nginx:
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location
Настраивает серверы имен, используемые для преобразования имен вышестоящих серверов в адреса, например:
resolver 127.0.0.1 [::1]:5353;
Адрес может быть указан как доменное имя или IP-адрес, а также необязательный порт (1.3.1, 1.2.2). Если порт не указан, используется порт 53. Серверы имен опрашиваются по кругу.
До версии 1.1.7 можно было настроить только один сервер имен. Указание серверов имен с использованием адресов IPv6 поддерживается, начиная с версий 1.3.1 и 1.2.2.
По умолчанию nginx будет искать адреса IPv4 и IPv6 при разрешении. Если поиск адресов IPv6 нежелателен, можно указать параметр ipv6=off.
Преобразование имен в адреса IPv6 поддерживается начиная с версии 1.5.8.
По умолчанию nginx кэширует ответы, используя значение TTL ответа. Необязательный valid
параметр позволяет переопределить его:
resolver 127.0.0.1 [::1]:5353 valid=30s;
До версии 1.1.9 настройка времени кэширования была невозможна, и nginx всегда кэшировал ответы на срок 5 минут.
Syntax: resolver_timeout time;
Default: resolver_timeout 30s;
Context: http, server, location
Устанавливает тайм-аут для разрешения имени, например:
resolver_timeout 5s;