Как отключить распечатку Rails RoutingError stacktrace в файлах журнала производства?
В моем приложении raiting rails я получил все типы случайных атак, запрашивающих файлы asp, zip и rar. Rails отобразили 404 страницу, как и ожидалось, но мой файл журнала производства застрял с датой загрузки RoutingError stacktrace, как показано ниже.
Мой вопрос: могу ли я блокировать URL-адреса с определенными шаблонами в Apache/Passenger? Или, по крайней мере, я могу настроить Rails только для регистрации самой ошибки, а не для печати всего stacktrace? Спасибо!
Processing ApplicationController#index (for 100.222.237.7 at 2011-03-22 10:59:54) [GET]
ActionController::RoutingError (No route matches "/include/upfile_flash.asp" with {:host=>"www.myhost.com", :method=>:get, :domain=>"myhost.com", :subdomain=>"www"}):
passenger (2.2.15) lib/phusion_passenger/rack/request_handler.rb:92:in `process_request'
passenger (2.2.15) lib/phusion_passenger/abstract_request_handler.rb:207:in `main_loop'
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:441:in `start_request_handler'
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:381:in `handle_spawn_application'
passenger (2.2.15) lib/phusion_passenger/utils.rb:252:in `safe_fork'
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:377:in `handle_spawn_application'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:163:in `start'
passenger (2.2.15) lib/phusion_passenger/railz/application_spawner.rb:222:in `start'
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:253:in `spawn_rails_application'
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:126:in `lookup_or_add'
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:247:in `spawn_rails_application'
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:80:in `synchronize'
passenger (2.2.15) lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize'
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:246:in `spawn_rails_application'
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:145:in `spawn_application'
passenger (2.2.15) lib/phusion_passenger/spawn_manager.rb:278:in `handle_spawn_application'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `__send__'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:352:in `main_loop'
passenger (2.2.15) lib/phusion_passenger/abstract_server.rb:196:in `start_synchronously'
Rendering /myapp/public/404.html (404 Not Found)
Ответы
Ответ 1
Вы можете добавить весь маршрут после всех ваших других маршрутов, которые поймают этот материал и вынесут контроллер/действие по вашему выбору:
match '*' => 'errors#not_found'
Вы даже можете выбрать только совпадение .asp или что угодно, если хотите:
match '*.:format' => 'errors#not_found', :constraints => {:format => /(asp|zip|rar)/i}
Ответ 2
Рельсы 4 и 5 отвечают:
match '*any', to: 'not_found#anything', via: [:get, :post]
Чтобы соответствовать параметру подстановочного знака, ему должно быть присвоено имя - в данном случае any
.
class NotFoundController < ApplicationController
def anything
Logger.new('log/not_found.log').info(request.fullpath)
# To render nothing:
# head :not_found #Rails 5
# render nothing: true, status: :not_found # for Rails 4
#To render 404 page
render file: 'public/404.html', status: :not_found, layout: false
end
end