我发现了这一行 Invalid method in request \x16\x03\x01 on error_log file
,以及其他一些类似的行,例如:
[Wed Oct 27 23:16:37 2010] [error] [client 187.117.240.164] Invalid URI in request x\xb2\xa1:SMl\xcc{\xfd"\xd1\x91\x84!d\x0e~\xf6:\xfbVu\xdf\xc3\xdb[\xa9\xfe\xd3lpz\x92\xbf\x9f5\xa3\xbbvF\xbc\xee\x1a\xb1\xb0\xf8K\xecE\xbc\xe8r\xacx=\xc7>\xb5\xbd\xa3\xda\xe9\xf09\x95"fd\x1c\x05\x1c\xd5\xf3#:\x91\xe6WE\xdb\xadN;k14;\xdcr\xad\x9e\xa8\xde\x95\xc3\xebw\xa0\xb1N\x8c~\xf1\xcfSY\xd5zX\xd7\x0f\vH\xe4\xb5(\xcf,3\xc98\x19\xefYq@\xd2I\x96\xfb\xc7\xa9\xae._{S\xd1\x9c\xad\x17\xdci\x9b\xca\x93\xafSM\xb8\x99\xd9|\xc2\xd8\xc9\xe7\xe9O\x99\xad\x19\xc3V]\xcc\xddR\xf7$\xaa\xb8\x18\xe0f\xb8\xff
第一个错误出现几秒钟后,Apache 顺利重启……
答案1
关于第一个错误,可能是您的网络服务器错误地尝试使用未加密的 HTTP 来发送来自端口 443(HTTPS)的请求。
要测试这一点,请远程登录到 Web 服务器的主机名或 IP 地址上的端口 443,然后发出:GET / HTTP/1.0
。假设 IP 地址是 10.0.0.1,您使用的是 Windows,并且安装了 Windows telnet 客户端(顺便说一句,这很糟糕 - 我更喜欢安全CRT或者油灰(免费),在命令提示符窗口中输入以下内容,然后按 Enter:
telnet 10.0.0.1 443
建立连接后(您应该看到一个带有闪烁光标的空白屏幕),输入:
GET / HTTP/1.0
...然后按两次 Enter。
快速提示:建立 telnet 会话后,您将无法看到您输入的内容,即使您的击键仍会发送到服务器。在 Windows telnet 客户端中,名为“localecho”的设置控制此行为,但默认情况下它是关闭的。
快速提示 #2:退格键“行不通”,因此请小心不要输入错误,否则您将需要从头开始。
如果您返回纯文本、可读的 HTML,则您的虚拟主机配置可能存在一些问题。
不过,我不确定第二个错误,即使是上述情况,它也不应该导致 Apache 正常重启......
答案2
经过一番研究,我们发现 apache 2.2.21 及以下版本在返回错误 400 时存在漏洞。
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0053
如果尚未更新,请将您的 apache 更新到 2.2.22 或更高版本。
答案3
修复了我的错误
代替
server {
listen 443;
使用以下内容告诉服务器您实际上正在使用 443 来监听 ssl/https 请求。
server {
listen *:443 default_server ssl;