【问题标题】:Rails: No route matches error for requests forwarded through Kong (Heroku)Rails:通过Kong(Heroku)转发的请求没有路由匹配错误
【发布时间】:2020-01-02 20:07:59
【问题描述】:

我在 Heroku 上设置了一个 Kong 实例,它将请求(通过路径匹配)转发到我在 Heroku 上开发和托管的 API 服务。

当我尝试通过 kong 访问路由时,我收到 404 代码,尽管当我尝试直接通过服务访问它时,我收到 200 代码和响应正文。

在检查了我的服务的 heroku 日志后,我能找到的唯一区别在于 fwd,除了请求相同,但产生的响应不同。

我已经尝试过使用我的其他服务,也包括 Rails 应用程序,并且还部署在 Heroku 上的其他子域下,它可以很好地与它们配合使用。

通过 Kong 转发的请求:

2019-08-29T14:02:55.855196+00:00 heroku[router]: at=info method=GET path="/v2/my_path" host=subdomain.domain.com request_id=ff74f402-9369-49c6-bdc3-c5743b888684 fwd="77.9.33.254, 10.33.32.50,54.153.223.157" dyno=web.1 connect=1ms service=5ms status=404 bytes=834 protocol=https

直接请求服务:

2019-08-29T14:04:56.874156+00:00 heroku[router]: at=info method=GET path="/v2/my_path" host=subdomain.domain.com request_id=120527af-0885-4a45-9350-24e747bead6d fwd="77.9.33.254" dyno=web.1 connect=0ms service=173ms status=200 bytes=1807 protocol=https

我希望从 Kong 收到与直接来自服务的响应相同的响应。

【问题讨论】:

    标签: ruby-on-rails heroku kong


    【解决方案1】:

    原来问题在于我们在 API 路由中使用了子域约束,并且由于 Kong 使用具有 Kong 实例域名值的 X-Forwarded-Host 标头,它与子域约束不匹配(因为rack 将此标头用于host_with_port 方法,如here 所示)。

    解决方案是在 API 子域下部署 Kong 实例(以便正确应用约束),并像往常一样将请求代理到我们的 Rails 服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多