nginx 역방향 프록시: 호스트가 허용되지 않음 오류

nginx 역방향 프록시: 호스트가 허용되지 않음 오류

nginx를 역방향 프록시로 사용하려고 합니다. 한 서버는 재생 서버입니다. 서버를 프록시하려고 하면 400 호스트가 허용되지 않음 오류가 발생합니다.

흐름

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

(즉, 클라이언트는 SSL을 통해 nginx와 통신하고 nginx는 http를 통해 필요한 모든 백엔드에 대한 역방향 프록시 역할을 합니다.)

이를 테스트하기 위해 가상 스칼라 플레이 백엔드를 사용하려고 합니다.

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(활성화된 사이트 내에서) SSL을 통해 http 트래픽을 리디렉션합니다.

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/

편집: 특히 문제는 nginx가 백엔드 서비스에 요청을 보내는 것입니다.~에서myexampledomain.com 대신 localhost에서. 요청을 보내는 방법을 모르겠습니다~에서로컬 호스트도착하다그런 다음 백엔드 서비스는 SSL을 통해 도메인에서 클라이언트로 반환됩니다.

답변1

application.conf에 허용된 호스트 필터를 설정해야 할 수도 있습니다. "."을 사용하는 모든 호스트를 허용하거나 "myexampledomain.com"을 사용할 수 있습니다.

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

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

관련 정보