суббота, 19 января 2013 г.

Использование записей /etc/hosts в nginx


Недавно столкнулся с интересной особенностью в nginx. У меня возникла необходимость прописать в параметре proxy_path имя сервера, которое в свою очередь определено в /etc/hosts. Не работает! Немного погуглив, я нашел совет. Рекомендации которого заключается в следующем:
Прописать директиву

resolver 127.0.0.1

Которая указывает адрес (можно указать так же и порт) для днс запросов, установить на этот же сервер dnsmasq, который может брать информацию из /etc/hosts (немного о настройке dnsmasq можно прочитать в статье про настройку wi-fi точки доступа). Однако, имена в /etc/hosts все же можно использовать без этих манипуляций. Имя сервера нужно прописать в upstream, которое затем использовать в proxy_path. Все работает! Пример использования:

upstream example {
  server  www.host.local;
}


location = /api/example/ {
  rewrite  ^/api/example(/.*) $1 break;
  access_log  /var/log/nginx/example.access.log main;
  error_log   /var/log/nginx/example.error.log  debug;
  proxy_set_header        Host  dns-name.domain.ru;
  proxy_pass              http://example/$request_uri;
}

В данном примере запросы вида http://nginx_site/api/example/something проксируются на хост dns-name.domain.ru с использованием hosts записи www.host.local. Проксированный урл запроса после обработки будет выглядеть так: http://dns-name.domain.ru/something.