纸上得来终觉浅,绝知此事要躬行。
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
、Slackware
SysV
: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 -S
httpd -t-D DUMP_VHOSTS
-M
/-t-D DUMP_MODULES
- 显示所有可供加载的模块
httpd -M
httpd -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-status
mod_status
页面的URL
之后可以使用?refresh
(浏览器刷新间隔)、?auto
(显示为状态表格样式)选项等
Scoreboard
含义_
发送回复,S
保持连接,R
DNS 查询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 工具
主要工具
zabbix
nagios
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