【问题标题】:How to silence ActionController::UnknownHttpMethod errors?如何使 ActionController::UnknownHttpMethod 错误静音?
【发布时间】:2019-04-11 19:06:05
【问题描述】:

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

一个 ActionController::UnknownHttpMethod 发生在 #:

TRACK,接受的 HTTP 方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLO​​CK、VERSION-CONTROL、REPORT、CHECKOUT、CHECKIN、UNCHECKOUT 、MKWORKSPACE、更新、标签、合并、基线控制、MKACTIVITY、ORDERPATCH、ACL、搜索、MKCALENDAR 和补丁

我想这是当机器人使用 Rails 无法处理的 HTTP 方法访问我的网站时(在我的情况下,主要是 OPENVASTRACKDEBUG、TRACKINDEX,还有像 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

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

感谢您的帮助。

【问题讨论】:

  • 您是否尝试过使用此要点中的代码:gist.github.com/remvee/600569
  • 是的,但该线程是 9 年前开始的。不确定它是否仍然有效...

标签: ruby-on-rails http nginx


【解决方案1】:

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

server {
  # (your vhost for this app)

  if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS|PATCH)$ ){
    return 405;
  }
}

【讨论】:

    【解决方案2】:

    实际上,最困扰我的是Exception Notifications,当机器人使用未知的 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}
        }
    

    让我们看看结果如何。我会在几周后发布更新。

    【讨论】:

    • 这方面有什么更新吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多