nginx обратный прокси: ошибка хоста не допускается

Я пытаюсь использовать nginx в качестве обратного прокси. Один сервер – игровой сервер. Когда я пытаюсь проксировать сервер, я получаю ошибку 400 Host Not Allowed.

течь

----------(services1) |----(services2) client ----(https)---> nginx ---(http)---|-------(services3) |----(services4) ---------(services5) 

(т. е. клиент разговаривает с nginx через ssl, а затем nginx действует как обратный прокси-сервер для любого бэкэнда, необходимого для http).

Я пытаюсь проверить это с помощью манекена для воспроизведения scala.

У меня есть nginx.conf который выглядит так:

 http { ... proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_http_version 1.1; upstream play-backend { server 127.0.0.1:9000; } include sites-enabled/*.conf; } 

Теперь у меня есть default.conf (внутри сайтов), которые перенаправляют HTTP-трафик через ssl:

 server { listen 80 default_server; list [::]:80 default_server; return 301 https://$host$request_uri; ... } 

Затем, внутри моего default-ssl.conf (внутри сайтов), у меня есть обратная логика прокси-сервера:

 server { listen 443 ssl http2; listen [::]:443 ssl http2; ... certificate and other stuff ... location /foo { proxy_pass http://play-backend; } } 

Я могу успешно переадресовать трафик через ssl, но я не уверен, почему я не могу прокси-сервер каким-либо из моих внутренних служб. У меня такое чувство, что я все устроил неправильно, и он каким-то образом пытается использовать https для общения с игровым сервером.

Я могу подтвердить, что игровой сервер работает, непосредственно нажимая на localhost:9000/

EDIT: В частности, проблема в том, что nginx делает запрос к серверной службе от myexampledomain.com, а не от localhost. Я не уверен, как отправить запрос с localhost на серверную службу, а затем вернуть ее клиенту из домена поверх ssl.

One Solution collect form web for “nginx обратный прокси: ошибка хоста не допускается”

Вероятно, вам нужно настроить разрешенный фильтр хостов на вашем приложении application.conf. Вы должны использовать использовать «.». чтобы разрешить любой Хост, или вы могли бы использовать «myexampledomain.com».

  play.filters.hosts { # Allow requests to myexampledomain.com. allowed = ["myexampledomain.com"] } 

https://www.playframework.com/documentation/2.6.x/AllowedHostsFilter

  • Как извлечь ключи RSA из Apache
  • Как я могу обновить сертификаты в своей системе, чтобы исправить ошибку wget: «Не удалось установить соединение SSL»?
  • VSFTPD вырезанные загрузки
  • Добавление сертификата nssdb из сценария установки
  • SSL сертификат отсутствует
  • apache2 Неверная команда 'SSLEngine'
  • Как расшифровать пароль?
  • haproxy, обслуживающий неверный SSL-сертификат для субдомена
  • Apache 2.4.6 VirtualHost Конфигурация DocumentRoot для SSL игнорируется
  • указать сертификат CA в Довекоте
  • Добавить один ключ к сертификатам CA из автоматизированного сценария
  • Linux и Unix - лучшая ОС в мире.