Ruby on rails Rails:通过Kong(Heroku)转发的请求没有路由匹配错误
我在Heroku上有一个Kong实例设置,它将请求(通过路径匹配)转发到我在Heroku上开发和托管的API服务 当我试图通过kong访问路由时,我收到404代码,尽管当我试图通过服务直接访问它时,我通过响应主体收到200代码 在检查了我的服务的heroku日志后,我能找到的唯一区别是Ruby on rails Rails:通过Kong(Heroku)转发的请求没有路由匹配错误,ruby-on-rails,heroku,kong,Ruby On Rails,Heroku,Kong,我在Heroku上有一个Kong实例设置,它将请求(通过路径匹配)转发到我在Heroku上开发和托管的API服务 当我试图通过kong访问路由时,我收到404代码,尽管当我试图通过服务直接访问它时,我通过响应主体收到200代码 在检查了我的服务的heroku日志后,我能找到的唯一区别是fwd,不同的是请求是相同的,但会产生不同的响应 我尝试过我的其他服务,也尝试过Rails应用程序,也尝试过在Heroku的其他子域下部署,它们都很好用 透过香港转达的要求: 2019-08-29T14:02:55
fwd
,不同的是请求是相同的,但会产生不同的响应
我尝试过我的其他服务,也尝试过Rails应用程序,也尝试过在Heroku的其他子域下部署,它们都很好用
透过香港转达的要求:
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收到的响应与直接从该服务得到的响应相同。事实证明,问题在于我们在API路由中使用子域约束,并且由于Kong使用具有Kong实例域名值的
X-Forwarded-Host
头,它与子域约束不匹配(因为机架将此头用于主机\u with_port
方法,如图所示)
解决方案是在API子域下部署Kong实例(以便正确应用约束),并像往常一样将请求代理到rails服务器