nginx 反向代理:主机不允许错误

nginx 反向代理:主机不允许错误

我正在尝试使用 nginx 作为反向代理。一台服务器是播放服务器。当我尝试代理服务器时,收到 400 Host Not allowed 错误。

流动

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

(即客户端通过 ssl 与 nginx 对话,然后 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(在启用站点内的)通过 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 而不是来自本地主机。我不知道如何发送请求本地主机后端服务,然后通过 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

相关内容