如何使动作控制器静音::未知HTTP方法错误?



在我的 Rails 生产网站上,我有时会收到十几个错误,如下所示:

一个 ActionController::UnknownHttpMethod 发生在 # 中:

跟踪,接受的HTTP方法是选项,获取,头,发布,放置,删除,跟踪,连接,PROFIND,PROPATCH,MKCOL,复制,移动,锁定,解锁,版本控制,报告,签出,签入,取消签出,MKWORKSPACE,更新,标签,合并,基线控制,MKACTIVITY,订单补丁,ACL,搜索,MK日历和补丁

我想这是当机器人使用Rails无法处理的HTTP方法访问我的网站时(在我的情况下,它主要是OPENVAS,TRACK,DEBUG,TRACK和INDEX但也有像WMIXLVXM这样的奇怪方法)。

有没有办法以任何方式使这些消息静音?我仍然不确定这是Rails问题还是Nginx问题。

我正在使用自定义控制器向用户呈现自定义错误页面:

Rails.application.routes.draw do
%w(404 500).each do |status|
match status, :to => 'errors#show', :status => status, :via => :all
end
...
end

class ErrorsController < ApplicationController
def show
status = params[:status] || 500
@title = "Error"
render(:status => status, :template => "errors/show.html.erb")
end
end

但是我的自定义控制器可能不会导致错误?

感谢您的任何帮助。

由于这些是你无论如何都不会处理的请求,更好的方法是在nginx级别限制https方法,这样这些方法就不会碰轨:

server {
# (your vhost for this app)
if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS|PATCH)$ ){
return 405;
}
}

实际上,最困扰我的是当机器人使用未知的HTTP方法访问我的网站时,我从Rails收到的异常通知。(有时我会在几秒钟内收到十几封An ActionController::UnknownHttpMethod occurred in ...的例外电子邮件。

所以在我的production.rb中,我添加了一行额外的行:

config.middleware.use ExceptionNotification::Rack,
:ignore_exceptions => ['ActionController::UnknownHttpMethod'] + ExceptionNotifier.ignored_exceptions, # I added this line
:email => {
:email_prefix => "[ERROR]",
:sender_address => %{"Error Notification" <notification@mydomain.com>},
:exception_recipients => %w{administrator@mydomain.com}
}

让我们看看这是如何解决的。我将在几周内发布更新。

最新更新