Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:通过Kong(Heroku)转发的请求没有路由匹配错误_Ruby On Rails_Heroku_Kong - Fatal编程技术网

Ruby on rails Rails:通过Kong(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

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

当我试图通过kong访问路由时,我收到404代码,尽管当我试图通过服务直接访问它时,我通过响应主体收到200代码

在检查了我的服务的heroku日志后,我能找到的唯一区别是
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服务器