Rails 陌生主机报错(baidu.com)

Rails strange host reported in error (baidu.com)

我有一个 rails 应用程序 运行 Apache 和 Passenger 以及虚拟主机(多个应用程序 运行 在同一台服务器上)

从 3 天前开始,我的日志中充满了奇怪的错误:

Missing template users/login, application/login with {:locale=>[:en], :formats=>["Accept: */*"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
* "/home/deployer/rails_apps/vantano/releases/20160318190203/app/views"
------------------------------- Request:

* URL        : http://www.baidu.com/
* HTTP Method: GET
* IP address : 222.186.21.107
* Parameters : {"controller"=>"users", "action"=>"login"}
* Timestamp  : 2016-05-12 18:14:12 UTC
* Server : eemvantano
* Rails root : /home/deployer/rails_apps/vantano/releases/20160318190203
* Process: 25133

现在,有 views/users/login.erb.html,但奇怪的部分是 URL。我的网站不是百度。在日志中添加了 Env dump,更多奇怪的东西:

------------------------------- Environment:

* HTTP_ACCEPT                                    : Accept: */*
* HTTP_HOST                                      : www.baidu.com
* HTTP_PROXY_CONNECTION                          : Keep-Alive
* HTTP_REFERER                                   : http://www.baidu.com/
* HTTP_USER_AGENT                                : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; WebSaver; .NET CLR 2.0.50727)
* HTTP_VERSION                                   : HTTP/1.1
* ORIGINAL_FULLPATH                              : /
* ORIGINAL_SCRIPT_NAME                           :
* PASSENGER_CONNECT_PASSWORD                     : [FILTERED]
* PATH_INFO                                      : /
* QUERY_STRING                                   :
* REMOTE_ADDR                                    : 222.186.21.107
* REMOTE_PORT                                    : 4362
* REQUEST_METHOD                                 : GET
* REQUEST_URI                                    : /
* ROUTES_37245440_SCRIPT_NAME                    :
* SCRIPT_NAME                                    :
* SERVER_NAME                                    : www.baidu.com
* SERVER_PORT                                    : 80
* SERVER_PROTOCOL                                : HTTP/1.1
* SERVER_SOFTWARE                                : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.16 OpenSSL/1.0.1f Phusion_Passenger/5.0.27

为什么baidu列为HOST和服务器名?

首先,您的 Apache 配置可能设置为回退到客户端为 SERVER_NAME 提供的 HTTP_HOST(有关更多详细信息,请参阅 UseCanonicalName and this SO answer 上的文档)。因此,尽管是伪造的,但两者匹配的事实不是问题(除非您的代码依赖于该值)。

其次,这看起来像是有人为 baidu.com(中国非常流行的搜索引擎)配置了他们的 DNS 以指向您的服务器。很难说为什么...