Http 如何处理Rails 3.1中缺少的主机头

Http 如何处理Rails 3.1中缺少的主机头,http,ruby-on-rails-3.1,rack,Http,Ruby On Rails 3.1,Rack,在一个流量非常低的网站上,我每天都会看到一些例外。例外情况如下所示: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true actionpack (3.1.1) lib/action_dispatch/http/url.rb:25:in `url_for' ------------------------

在一个流量非常低的网站上,我每天都会看到一些例外。例外情况如下所示:

Missing host to link to! Please provide the :host parameter,
  set   default_url_options[:host], or set :only_path to true
actionpack (3.1.1) lib/action_dispatch/http/url.rb:25:in `url_for'

-------------------------------
Request:
-------------------------------

 * URL       : http:///
为了清晰起见,这一部分被删节,但没有其他重要的识别细节。例如,没有用户代理或引用程序。看起来是这样的:这些HTTP/1.0请求缺少
Host
头。现在我感到奇怪的是,这种异常甚至会发生,因为所讨论的域名是由nginx使用301s规范化的,因此,如果不使用正确的域,甚至不可能访问Rails应用程序

我不明白Rails为什么会依赖于这个头部,因为Nginx似乎应该通过更可靠的规范域,但是我不熟悉机架内部。如果有人对如何最好地解决这个问题有任何指导,我将不胜感激

  • Rails/Rack依赖于此标头是否有充分的理由
  • 这里是否存在潜在的机架错误
  • 我应该在头中注入中间件吗
  • 我应该在Rails中破解一些东西来抑制它吗
  • 我应该将Nginx配置为拒绝HTTP/1.0请求吗

    • 如果客户端没有使用正确的域,可能无法访问应用程序,但这不是问题所在。问题是服务器知道正确的域。如果没有
      主机
      头和完全限定的URL,服务器如何知道客户端请求的主机?

      如果客户端没有使用正确的域,可能无法访问应用程序,但这不是问题所在。问题是服务器知道正确的域。如果没有
      主机
      头和完全限定的URL,服务器如何知道客户端请求的主机?

      好问题,我不知道,因为我没有完整的请求日志,也不知道是什么类型的用户代理发送了此消息。我对HTTP协议不太熟悉,但主机头不能是发送域的唯一位置,因为HTTP/1.0不需要它,而且nginx肯定看到了正确的域(否则它将在有机会引发异常之前重定向)。主机不一定是发送域的唯一位置,但如果域未发送到任何位置,则报告的错误通常是缺少主机头,因为主机头通常发送到该位置。好问题,我不知道,因为我没有完整的请求日志,也不知道是哪种用户代理发送了此消息。我对HTTP协议不太熟悉,但主机头不能是发送域的唯一位置,因为HTTP/1.0不需要它,而且nginx肯定看到了正确的域(否则它将在有机会引发异常之前重定向)。主机不一定是发送域的唯一位置,但如果域未发送到任何位置,则报告的错误通常是缺少主机头,因为主机头通常发送到该位置。我们在自己身上释放了安全审计机器人,它们通过HTTP/1.0 reqs产生了大量此类异常。我们在我们身上释放了安全审计机器人,他们通过HTTP/1.0 reqs产生了大量的异常。仍在寻找解决方案。