Динамический прокси Nginx с Docker - PullRequest
0 голосов
/ 15 ноября 2018

Я застрял с настройкой экземпляра Nginx, встроенного в контейнер Docker, который должен реализовывать динамический обратный прокси-сервер для не включенных веб-сайтов CORS.

Я ожидал, что это простая задача, но она не работает при некоторых условиях. Это рабочий блок местоположения:

location ~* ^/proxy/(.*) {


      proxy_set_header Host            $host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_redirect off;

      proxy_pass https://google.com;
   }

Эта конфигурация работает. Страница Google появляется. Так что, похоже, Docker может разрешить имя Google.

Эта конфигурация (которая мне более интересна) не работает:

   location ~* ^/proxy/(.*) {

      proxy_set_header Host            $host;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_redirect off;

      proxy_pass http://$1$is_args$args;
   }

Кажется, что Docker не может разрешить имя, извлеченное первой группой регулярных выражений.

Если я добавлю в блок местоположения директиву resolver, она начнет работать.

      location ~* ^/proxy/(.*) {
        resolver 192.168.31.2;
        proxy_set_header Host            $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_redirect off;

        proxy_pass http://$1$is_args$args;
   }

Так в чем же разница? Зачем нужна директива решателя? Почему в первом случае (если имя пути прокси задано жестко) все работает, а во втором - нет? Нужно ли использовать файл resolv.conf внутри самого контейнера?

Я также пытался создать контейнер, передающий параметр - dns , но все еще не работающий.

Идеи? Спасибо, Fb

1 Ответ

0 голосов
/ 15 ноября 2018

Nginx попытается разрешить имя_домена с помощью директивы upstream: в случае неудачи он попытается использовать resolver для определения вашего имени в качестве DNS.Итак, в конце вам нужно установить директиву resolver.

...