nginx 如何使HTTP Controller::UnknownHttpMethod错误静默?

izkcnapc  于 2024-01-06  发布在  Nginx
关注(0)|答案(3)|浏览(155)

在我的Rails生产网站上,我有时会得到一打左右的错误沿着行:
在#中出现了一个HTTP Controller::UnknownHttpMethod:
TRACK,可接受的HTTP方法有OPTIONS、GET、HEAD、POST、PUT、REPORT、TRACE、REPORT、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、REPORT、UNREPORT、UNREPORT、KOUT、KIN、UNREPORT、MKWORKSPACE、UPDATE、LABEL、MERGE、BASELINE-CONTROL、MKACTIVITY、ORDERPATCH、ACL、REPORT、MKCALENDAR和PATCH
我猜这是当机器人用Rails无法处理的HTTP方法攻击我的网站时(在我的情况下,它主要是OPENVASTRACKDEBUGTRACKINDEX,但也有奇怪的方法,如WMIXLVXM)。
有没有办法让这些消息保持沉默?我仍然不确定这是Rails的问题还是Nginx的问题。
我使用自定义控制器向用户呈现自定义错误页面:

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

个字符
但我的自定义控制器可能不会导致错误?
谢谢你的帮助

kupeojn6

kupeojn61#

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

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

字符串

q5iwbnjs

q5iwbnjs2#

实际上,最让我烦恼的是当一个机器人用未知的HTTP方法访问我的网站时,我从Rails得到的Exception Notifications。(有时我会在几秒钟内收到十几封类似于An ActionController::UnknownHttpMethod occurred in ...的异常邮件。)
所以在production.rb中我添加了一行:

  1. config.middleware.use ExceptionNotification::Rack,
  2. :ignore_exceptions => ['ActionController::UnknownHttpMethod'] + ExceptionNotifier.ignored_exceptions, # I added this line
  3. :email => {
  4. :email_prefix => "[ERROR]",
  5. :sender_address => %{"Error Notification" <[email protected]>},
  6. :exception_recipients => %w{[email protected]}
  7. }

字符串
让我们看看它是如何工作的。我将在几周内发布更新。

qvsjd97n

qvsjd97n3#

你可以使用Rack Attack Gem修复它。首先在你的config/initializers中创建一个rack_attack.rb文件:

  1. VALID_HTTP_METHODS = ActionDispatch::Request::HTTP_METHODS.map(&:to_s)
  2. Rack::Attack.blocklist('block unknown methods') do |req|
  3. !VALID_HTTP_METHODS.include?(req.request_method)
  4. end
  5. Rack::Attack.blocklisted_responder = lambda do |env|
  6. [403, {}, ['Only valid HTTP methods are allowed']]
  7. end

字符串
然后在application.rb文件中添加以下行:

  1. config.middleware.insert_before 0, Rack::Attack


这将有望修复该异常。

展开查看全部

相关问题