Tin*_*n81 6 ruby-on-rails http nginx
在我的 Rails 生产网站上,我有时会收到十几个左右的错误:
# 中发生 ActionController::UnknownHttpMethod:
TRACK,接受的 HTTP 方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK、UNLOCK、VERSION-CONTROL、REPORT、CHECKOUT、CHECKIN、UNCHECKOUT、MKWORKSPACE、更新、标签、合并、基线控制、MKACTIVITY、ORDERPATCH、ACL、SEARCH、MKCALENDAR 和 PATCH
我想这是当机器人使用 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
Run Code Online (Sandbox Code Playgroud)
class ErrorsController < ApplicationController
def show
status = params[:status] || 500
@title = "Error"
render(:status => status, :template => "errors/show.html.erb")
end
end
Run Code Online (Sandbox Code Playgroud)
但是我的自定义控制器可能不会导致错误?
谢谢你的帮助。
由于这些是您无论如何都不会处理的请求,更好的方法是在 nginx 级别限制 https 方法,以便这些方法根本不会出现问题:
server {
# (your vhost for this app)
if ($request_method !~ ^(GET|HEAD|PUT|POST|DELETE|OPTIONS|PATCH)$ ){
return 405;
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,最困扰我的是当机器人使用未知的 HTTP 方法访问我的网站时,我从 Rails 收到的异常通知。An ActionController::UnknownHttpMethod occurred in ...(有时我会在几秒钟内收到十几封异常电子邮件 \xc3\xa0 la 。)
所以在我的中production.rb我添加了一行:
config.middleware.use ExceptionNotification::Rack,\n :ignore_exceptions => [\'ActionController::UnknownHttpMethod\'] + ExceptionNotifier.ignored_exceptions, # I added this line\n :email => {\n :email_prefix => "[ERROR]",\n :sender_address => %{"Error Notification" <notification@mydomain.com>},\n :exception_recipients => %w{administrator@mydomain.com}\n }\nRun Code Online (Sandbox Code Playgroud)\n\n让我们看看效果如何。我将在几周内发布更新。
\n| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |