Рейтинг:0

NGINX: обратный прокси-путь к поддомену и добавление остальных

флаг cn

У меня есть следующий файл конфигурации NGINX:

сервер {
  имя_сервера devices.example.org;

  ssl_протоколы TLSv1.2;
  ssl_certificate /etc/ssl/web/example.crt;
  ssl_certificate_key /etc/ssl/web/example.key;

  расположение ~* ^/(.*)(.*)?$ {
    прокси_пароль http://$1.proxy.tv$2;
    прокси_буферизация выключена;
    proxy_set_header Хост $http_host;
    proxy_set_header X-Real-IP $remote_addr;
  }

И мне нужно проксировать все входящие запросы на показанный бэкэнд, т.е.

  • https://devices.example.org/m123 должен проксировать http://m123.proxy.tv
  • https://devices.example.org/m123/favicon.ico должен проксировать http://m123.proxy.tv/favicon.ico
  • https://devices.example.org/m123/scripts/something.js?params=bar должен проксировать http://m123.proxy.tv/scripts/something.js?params=bar

Тем не менее, я всегда получаю Плохой шлюз ошибка в качестве возврата, а в логах получаю:

[ошибка] 18643 # 0: * 12393 favicon.ico.proxy.tv не может быть разрешен (3: Хост не найден)

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

Другие комбинации, которые я пробовал:

  • расположение ~* ^/(.*)(?:/(.*))$ прокси к http://$1.proxy.tv/$2$is_args$args
  • расположение ~* ^/(.*)(?:/(.*))? прокси к http://$1.proxy.tv/$2$is_args$args

Любая помощь приветствуется.

Рейтинг:0
флаг us

У вас есть две группы захвата регулярных выражений с подстановочными знаками в вашем место расположения директива block, что означает, что все захвачено в $1.

Исходя из ваших требований, следующее место расположения блок может работать:

расположение ~ ^/(?<субдомен>[^/]+)/(<путь>.*)?$ {
    proxy_pass http://$subdomain.proxy.tv/$path;
    ...
}

Для ясности я использую имена переменных (<>) в регулярных выражениях. [^/]+ используется для захвата первой части компонента пути URL (захват 1 или более символов, которые не являются /).

Причина Плохой шлюз ошибка в том, что nginx не смог разрешить доменное имя favicon.ico.proxy.tv. Вот несколько причин, почему это происходит:

  1. favicon.ico.proxy.tv не прописан в DNS.
  2. Вы не настроили nginx резольвер директива с действительными преобразователями DNS.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.