Apache 便捷指令集
用于命令行的Apache相关实用命令集合。
文法检查
httpd -t
Syntax OK
检查 conf 文件中是否存在语法错误的命令。
在重新启动之前一定要确认。
service httpd configtest 或者 apachectl configtest 基本上也可以,但上述命令的键入次数更少。
重启
httpd -k graceful
缓慢地重新启动。
前面的语法检查会自动运行,如果有语法错误,将不会重新启动。
虽然 service httpd graceful 和 apachectl graceful 也是相同的作用,但上述的方法按键次数较少。systemctl graceful httpd 无效。
在验证了 graceful 的文章1中也有报道称其无法正常工作,所以在 CentOS 7 中使用 systemctl reload httpd 可能更好一些。
错误日志
tailf /var/log/httpd/error_log
[Sun Jan 01 09:00:00.054284 2017] [cgi:error] [pid 18504] [client 127.0.0.1:59490] script not found or unable to stat: /var/www/cgi-bin/php.ini
[Sun Jan 01 09:00:00.064974 2017] [autoindex:error] [pid 18504] [client 127.0.0.1:59490] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
[Sun Jan 01 09:00:00.303906 2017] [core:error] [pid 18501] [client 127.0.0.1:59494] AH00126: Invalid URI in request GET /sdk/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/etc/vmware/hostd/vmInventory.xml HTTP/1.1
[Sun Jan 01 09:00:00.304917 2017] [core:error] [pid 18501] [client 127.0.0.1:59496] AH00135: Invalid method in request <script>alert(1)</script> / HTTP/1.1
[Sun Jan 01 09:00:00.311338 2017] [cgi:error] [pid 18501] [client 127.0.0.1:59498] script not found or unable to stat: /var/www/cgi-bin/awstats.pl
[Sun Jan 01 09:00:00.312637 2017] [cgi:error] [pid 18501] [client 127.0.0.1:59498] script not found or unable to stat: /var/www/cgi-bin/awredir.pl
[Sun Jan 01 09:00:00.445709 2017] [core:error] [pid 18501] [client 127.0.0.1:59500] AH00126: Invalid URI in request GET /../../windows/dvr2.ini HTTP/1.1
[Sun Jan 01 09:00:00.446445 2017] [core:error] [pid 18501] [client 127.0.0.1:59502] AH00126: Invalid URI in request GET /htdocs/../../../../../../../../../../../etc/passwd HTTP/1.1
[Sun Jan 01 09:00:00.447084 2017] [autoindex:error] [pid 18501] [client 127.0.0.1:59504] AH01276: Cannot serve directory /var/www/html/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
[Sun Jan 01 09:00:00.460959 2017] [core:error] [pid 18501] [client 127.0.0.1:59504] AH00126: Invalid URI in request GET /help/../../../../../../../../../../../../../../../../etc/shadow HTTP/1.1
util-linux 包中的 tailf 命令用于显示文件的最后10行,并继续等待文件添加的行。tailf 类似于 tail -f,但是只有在文件有新的添加时才会访问文件。因此,文件的访问时间不会更新,并且在没有与日志相关的操作时,也不会发生定期的文件系统刷新。
好像现在 tailf 不再推荐使用了,并且据说会在2017年3月从 util-linux 中删除。
有些人建议使用 less +F /var/log/httpd/error_log。
命令历史搜索
在命令行中按下Ctrl + r,提示符将变为以下形式,进入命令历史记录的搜索模式。
(reverse-i-search)`':
当您处于这种状态时,只需输入要过滤的字符串,而无需连续按↑键,就可以轻松地找到过去的命令。
(reverse-i-search)`gra': httpd -k graceful
用评论进行标记
在命令的结尾输入 #,后面的内容将被忽略视为注释。我们可以将其作为标签使用,在搜索不易记忆的命令历史时可以使用。
httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}' #conflist
(reverse-i-search)`#conflist': httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}' #conflist
ApacheTop 是一个基于命令行的工具,用于实时监视和分析 Apache HTTP 服务器的活动。
yum -y install epel-release && yum -y install apachetop
apachetop
last hit: 06:12:43 atop runtime: 0 days, 00:00:30 06:12:49
All: 5 reqs ( 0.2/sec) 332.3K ( 14.4K/sec) 66.5K/req
2xx: 5 ( 100%) 3xx: 0 ( 0.0%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 30s): 5 reqs ( 0.2/sec) 332.3K ( 11.1K/sec) 66.5K/req
2xx: 5 ( 100%) 3xx: 0 ( 0.0%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
REQS REQ/S KB KB/S URL
2 0.22 123.9 13.8*/
1 0.04 47.6 2.1 /blog
1 0.08 61.5 5.1 /news
1 0.06 99.2 5.5 /news/2016/010102
解析日志并实时显示当前访问状态,就像top命令一样。
按下d键可切换到URL、主机和来访者。
使用上下箭头键移动标记*,使用左右箭头键切换列表显示和详细显示。
指定日志文件
apachetop -f /var/www/vhosts/example.jp/log/access.log
如果想指定除默认的/var/log/httpd/access_log之外的文件,请使用-f选项。
安全检查
yum -y install epel-release && yum -y install nikto
nikto -h 127.0.0.1
- ***** RFIURL is not defined in nikto.conf--no RFI tests will run *****
- ***** SSL support not available (see docs for SSL install) *****
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP: 127.0.0.1
+ Target Hostname: localhost
+ Target Port: 80
+ Start Time: 2017-01-01 09:00:00 (GMT9)
---------------------------------------------------------------------------
+ Server: Apache/2.4.6 (CentOS)
+ Server leaks inodes via ETags, header found with file /, fields: 0x1111 0x5058a1e728280
+ The anti-clickjacking X-Frame-Options header is not present.
+ Allowed HTTP Methods: OPTIONS, GET, HEAD, POST, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ 4197 items checked: 0 error(s) and 6 item(s) reported on remote host
+ End Time: 2017-01-01 09:00:05 (GMT9) (5 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
可以通过EPEL软件仓库轻松安装名为Nikto的安全诊断工具。有关详细的处理方法,请参考”Apache安全设置”。
日志分析
grep 01/Jan/2017:12 /var/log/httpd/access_log | awk -F '"' '{print $2}' | awk '{print $2}' | sort | uniq -c | sort -n -r
69 /
48 /en/
35 /css/base.css
23 /favicon.ico
23 /img/example.jpg
这是一个示例,用于输出2017年1月1日12点期间按请求分类的访问次数。有关其他模式,请参考“使用awk和uniq统计Apache日志”的文档。
设定文件列表
httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}'
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
有关其他信息的获取,请参考“使用命令行获取Apache信息”。
http://www.lesstep.jp/step_on_board/apache/610/ (点击链接)
https://linuxjm.osdn.jp/html/util-linux/man1/tailf.1.html (点击链接)
http://man7.org/linux/man-pages/man1/tailf.1.html (点击链接)
http://b.hatena.ne.jp/entry/www.brianstorti.com/stop-using-tail/ (点击链接)
http://labs.timedia.co.jp/2011/12/improve-reusability-of-shells-command-line-history.html (点击链接)