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