纸上得来终觉浅,绝知此事要躬行。

1. 运行 Apache
1.1 手动启动和停止
启动操作
CentOS6/7基本操作一致
# CentOS6上是系统默认安装的;CentOS6上是使用yum安装的
[root@MiWiFi-R3-srv ~]# which httpd
/usr/sbin/httpd
[root@MiWiFi-R3-srv ~]# /usr/sbin/httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:feb8:76b5. Set the 'ServerName' directive globally to suppress this message
[root@MiWiFi-R3-srv ~]# ps -aux | grep httpd
root 18849 0.0 0.3 228272 3704 ? Ss 18:42 0:00 /usr/sbin/httpd
apache 18850 0.0 0.3 230492 3896 ? S 18:42 0:00 /usr/sbin/httpd
apache 18851 0.0 0.3 230492 3904 ? S 18:42 0:00 /usr/sbin/httpd
apache 18852 0.0 0.3 230356 3380 ? S 18:42 0:00 /usr/sbin/httpd
......
停止操作
- 通常不推荐手动
Kill掉httpd进程,因为可以导致用户请求无法响应等问题
# 【方法一】手动杀死所有httpd进程
root@MiWiFi-R3-srv ~]# ps -aux | grep httpd | grep -v grep | awk '{print $2}' | xargs kill -9
# 【方法二】手动杀死主httpd进程,推荐使用
root@MiWiFi-R3-srv ~]# updatedb
root@MiWiFi-R3-srv ~]# locate httpd.pid
/var/run/httpd/httpd.pid
root@MiWiFi-R3-srv ~]# cat /var/run/httpd/httpd.pid
18849
root@MiWiFi-R3-srv ~]# cat /var/run/httpd/httpd.pid | kill -9
注释:
- 提示如下信息
httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:feb8:76b5. - 说明
Apache没有找到默认的服务器主机名,这时使用本机的IP地址作为服务器名称,之后可以通过修改配置文件解决此问题。
1.2 自动启动和关闭
通常在
Linux上有两种启动风格:BSD和SysV两种启动风格
BSD:FreeBSD、SlackwareSysV:CentOS、debian、RHEL
BSD风格
- 由于
BSD风格的脚本倾向于使用顺序运行,因此只需要在启动脚本的后面加上启动方式就可以了 - 最直接和暴力的方法就是在
rc文件的最后加上/usr/sbin/httpd启动httpd服务 - 更合理的方法就是编写一个启动脚本,然后在
rc的后面加上对这个脚本的调用
SysV风格
SysV风格将Linux的启动分为很多不同的级别,每个级别有不同的定义- 启动级别
3为命令行模式,启动级别5为图形化模式
# CentOS6中实例,7中启动机制为Systemd
[root@MiWiFi-R3-srv ~]# cat /etc/inittab | grep id
id:5:initdefault:
# 启动脚本可以借鉴apachectl脚本
[root@MiWiFi-R3-srv ~]# cat `which apachectl`
# 连接启动级别
[root@MiWiFi-R3-srv ~]# cp /usr/sbin/apachectl /etc/init.d/
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc3.d/S90httpd
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc0.d/K90httpd
[root@MiWiFi-R3-srv ~]# ln -sv /etc/init.d/apachectl /etc/rc6.d/K90httpd
1.3 使用 apachectl 管理
程序使用参数
start- 如果配置文件检查没有问题,启动
httpd程序,重复启动报错
- 如果配置文件检查没有问题,启动
stop- 停止
httpd程序,重复停止报错
- 停止
status- 显示简要的状态报告,类似于
fullstatus选项,但省略正在处理的请求
- 显示简要的状态报告,类似于
restart- 重启启动
httpd并检查httpd配置文件
- 重启启动
graceful- 类似于
start,但不会中断当前正在处理的连接和日志记录,推荐使用
- 类似于
graceful-stop- 类似于
stop,但不会中断当前正在处理的连接和日志记录,推荐使用
- 类似于
configtest- 解析并检查配置文件语法
fullstatus- 显示出有
mod_status提供的状态报告,需要启动mod_status模块并安装elinks浏览器
- 显示出有
程序帮助信息
[root@MiWiFi-R3-srv ~]# /usr/sbin/apachectl -h
Usage: /usr/sbin/httpd [-D name] [-d directory] [-f file]
[-C "directive"] [-c "directive"]
[-k start|restart|graceful|graceful-stop|stop]
[-v] [-V] [-h] [-l] [-L] [-t] [-S]
Options:
-D name : define a name for use in <IfDefine name> directives
-d directory : 指定初始的ServerRoot根路径
-f file : 指定一个替代ServerConfigFile文件
-C "directive" : process directive before reading config files
-c "directive" : process directive after reading config files
-e level : 指定错误级别(see LogLevel)
-E file : 指定错误信息输出到那个文件中
-v : 显示版本号
-V : 显示编译配置(show compile settings)
-h : 列出可用的命令行选项
-l : 显示编译模块(list compiled in modules)
-L : list available configuration directives
-S : a synonym for -t -D DUMP_VHOSTS
-t -D DUMP_MODULES : 显示加载模块(show all loaded modules)
-t -D DUMP_VHOSTS : show parsed settings (currently only vhost settings)
-M : a synonym for -t -D DUMP_MODULES
-t : 运行语法检查配置文件
1.4 运行多个 Apache 服务器
所以的
Apache管理员都会遇到一个问题,就是在一台物理系统上运行多个版本的Apache服务器,或者是运行多个同一个版本的Apache服务器。
运行多个不同版本
- 运行多个不同版本的
Apache,只需要在编译时为不同版本的Apache指定不同的安装目录就可以了 - 这样安装后的服务器及其组件都在指定目录下,每个版本拥有自己的守护进程
httpd、DSO模块和配置文件 ./configure --prefix=/usr/local/apache2.4
运行多个同一个版本
- 运行多个同一个版本的
Apache,只需要指定一个不同的配置文件就可以了 - 要同时启动多个
Apache服务器的关键则是为不同的Apache服务器指定唯一的端口,通过指定不同的配置文件实现 httpd -f /usr/local/apache2/conf/httpd.conf
1.5 httpd 命令
httpd和apachectl命令参数使用基本一致
-D name- 通过指定
<ifDefine>容器的名称来确认是否使用<ifDefine>容器配置的内容 httpd -D SSL
- 通过指定
-d directory- 指定一个新的
ServerRoot目录 httpd -C /var/www
- 指定一个新的
-f file- 使用指定的文件作为
Apache配置文件 httpd -f /usr/local/apache2/conf/httpd.conf
- 使用指定的文件作为
-e level- 设置
LogLevel的错误信息级别 httpd -e warn
- 设置
-E file- 将错误信息送入到一个指定的文件中
httpd -E /var/www/log/log/warn.log
-C "directive"- 在读取配置文件之前,先处理
"directive"的配置 httpd -C "DocumentHome" /home/escape
- 在读取配置文件之前,先处理
-c "directive"- 在读取配置文件之后,再处理
"directive"的配置 httpd -c "DocumentHome" /home/escape
- 在读取配置文件之后,再处理
-V- 显示
httpd的版本信息以及编译时的参数 httpd -V
- 显示
-l- 列出编译到
Apache中的模块(核心模块) httpd -l
- 列出编译到
-L- 列出可以用到指令的有效参数和使用区域
httpd -L
-S/-t-D DUMP_VHOSTS- 分析配置文件(现在只用于虚拟主机中的配置)
httpd -Shttpd -t-D DUMP_VHOSTS
-M/-t-D DUMP_MODULES- 显示所有可供加载的模块
httpd -Mhttpd -t-D DUMP_MODULES
-t- 测试配置文件
httpd -l
-v- 显示版本信息和编译时间
httpd -v
-h- 显示命令行的帮助
httpd -h
2. 监控 Apache
将介绍一些
Apache类Web服务器的监控工具,其中有的是Apache自带的,还有一些是由社区提供的。
2.1 自带的 Web 监视器
通过这两个模块,用户可以很容易知道
Apache的工作状态和配置情况。但是在正常工作的服务器上,不推荐使用这两个模块,一是因为它们消耗一点系统资源,二是因为它们会泄露你的服务器信息。
主要模块
mod_status- 动态显示当前服务器的运行状态
mod_info- 提供服务器附加的配置信息
mod_status模块
- 功能
- 当前工作的进程数量
- 空闲的进程数量
- 服务器已经运行的时间
- 当前正在连接的主机和请求
- 单个进程的
CPU使用率和Apache当前CPU使用的百分比 - 每秒平均请求量,每秒发送的字节数,每秒请求发送的字节数
- 启用
- 配置
httpd的配置文件(这里使用/etc/httpd/conf/httpd.conf) - 重新
reload加载httpd服务
- 配置
- 页面地址
mod_status页面的访问地址http://you_server_name/server-statusmod_status页面的URL之后可以使用?refresh(浏览器刷新间隔)、?auto(显示为状态表格样式)选项等
Scoreboard含义_发送回复,S保持连接,RDNS 查询W关闭连接,L登录,G收到结束表示后关闭I需要清除,.空的进程位
# CentOS6中配置
[root@MiWiFi-R3-srv ~]# vim /etc/httpd/conf/httpd.conf
# 确认mod_status模块已经加载
LoadModule status_module modules/mod_status.so
# 取消对于注释,让模块显示更多信息,如每个字httpd进程的应答信息等
ExtendedStatus On
# 取消对于注释
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com
</Location>

mod_info模块
- 功能
- 提供服务器的配置信息并且也不能动态更新
- 显示了哪些模块正在被使用,每个模块的钩子信息
- 启用
- 修改
httpd配置文件(这里使用/etc/httpd/conf/httpd.conf) - 重新
reload加载httpd服务
- 修改
- 页面地址
mod_info页面的访问地址http://you_server_name/server-info- 可以显示模块信息,如
http://you_server_name/server-info#mod_perl.c mod_info页面的URL之后可以使用?config(配置文件)、?<module-name>(模块信息)、?list(所有使用中的模块列表)、server(基本服务器信息)、?hooks(每个模块所属钩子列表)选项等
# CentOS7中配置,mod_info模块不在httpd.conf文件中,而是使用模块化配置
[root@MiWiFi-R3-srv ~]# cat /etc/httpd/conf.modules.d/00-base.conf | grep mod_info
LoadModule status_module modules/mod_info.so
# 【方式一】在/etc/httpd/conf/httpd.conf文件,添加如下内容
# 【方式二】在/etc/httpd/conf.d中新建server-info.conf文件,添加如下内容
<Location "/server-info">
SetHandler server-info
Require host example.com
Require ip 127.0.0.1
Require ip 192.168.31.173
Require not ip 192.168.31.94
</Location>

2.2 第三方 Web 工具
主要工具
zabbixnagios
zabbix软件
- 简述
- 基于
PHP脚本的分布式系统监视以及网络监视功能的企业级开源解决方案
- 基于
- 特点
- 自动发现服务器与网络设备
- 分布式检视以及
Web集中管理功能 - 用户安全认证和可定义的授权方式
- 通过
Web界面设置或查看检视结果 - 支持
pgsql/mysql数据库
- 安装
yum install zabbix20-agent- 最近的 zabbix 官方文档
nagios软件
- 简述
nagios是一个检视系统运行状态和网络信息的监视系统
- 特点
- 服务等检视的并发处理
- 检视主机资源(进程、磁盘等)
- 监事网络服务(
SMTP、POP3、HTTP、NNTP、PING等) - 可指定自定义的事件处理控制器
- 简单的插件设计可以轻松扩展
nagios的监视功能 - 错误通知功能(通过
email、pager或其他用户自定义方法) - 可选的基于浏览器的
Web界面以及方便查看网络状态、各种系统问题以及日志等
- 安装
yum install nagios
区别
- 中小规模(服务器<=1k):Zabbix
- 大规模(1k>=服务器<=10k):Nagios 进行二次开发
- 超大规模(服务器>=10k):开发适应自己平台的监控软件吧
- 一个牛逼的东西prometheus.io