httpd 简介
httpd(Apache HTTP Server)是一款历史悠久的开源 Web 服务器软件,由 Apache 软件基金会开发和维护。自 1995 年首次发布以来,Apache 一直是 Web 服务器领域的领导者,以其稳定性、安全性和灵活性著称。根据 W3Techs 的最新统计,httpd 支持着全球超过 40%的网站运行,特别是在企业级应用中占据重要地位。
httpd 的主要特点包括:
- 模块化架构:通过动态加载模块扩展功能
- 支持多种编程语言:如 PHP、Python、Perl 等
- 丰富的认证机制:包括基本认证、摘要认证等
- 强大的 URL 重写功能:通过 mod_rewrite 模块实现
- 虚拟主机支持:可在一台服务器上托管多个网站
一、环境准备
1. 系统要求
以 CentOS 7/RHEL 7 为例进行说明,建议系统满足以下最低配置:
- CPU:1 核以上
- 内存:1GB 以上
- 磁盘空间:10GB 以上
- 网络:稳定的互联网连接
2. 系统检查
在开始安装前,建议先检查系统状态:
# 检查系统版本
cat /etc/redhat-release# 检查内核版本
uname -r# 检查磁盘空间
df -h# 检查内存
free -m
3. 更新系统
建议使用新安装的系统环境,确保干净无冲突。在安装前先更新系统:
# 更新系统软件包
sudo yum update -y# 安装常用工具
sudo yum install -y wget vim net-tools
4. 防火墙配置
确保防火墙允许 HTTP(80) 和 HTTPS(443) 端口:
# 检查防火墙状态
sudo systemctl status firewalld# 开放端口
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
5. SELinux 配置
如果系统启用了 SELinux,需要进行适当配置:
# 检查 SELinux 状态
getenforce# 临时关闭(如需)
sudo setenforce 0# 永久关闭(如需)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
二、安装 httpd
# 安装httpd主程序
sudo yum install -y httpd# 验证安装版本
httpd -v# 启动服务并设置开机自启
sudo systemctl start httpd
sudo systemctl enable httpd# 检查服务状态(应显示active/running)
sudo systemctl status httpd# 查看监听端口(默认80)
sudo netstat -tulnp | grep httpd
三、配置防火墙
现代 Linux 系统通常使用 firewalld 作为防火墙管理工具。
# 查看防火墙状态
sudo firewall-cmd --state# 永久开放HTTP(80)和HTTPS(443)服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 如果需要开放自定义端口(如8080)
sudo firewall-cmd --permanent --add-port=8080/tcp# 重新加载防火墙配置
sudo firewall-cmd --reload# 查看当前开放的端口和服务
sudo firewall-cmd --list-all
四、配置文件结构
httpd 采用模块化设计,主要文件和目录结构如下:
/etc/httpd/
├── conf/ # 主配置目录
│ ├── httpd.conf # 主配置文件
│ └── magic # 文件类型识别
├── conf.d/ # 附加配置文件目录
│ ├── autoindex.conf # 目录列表配置
│ ├── userdir.conf # 用户目录配置
│ └── welcome.conf # 默认欢迎页
├── conf.modules.d/ # 模块配置文件
├── logs -> ../../var/log/httpd # 日志目录
├── modules/ # 模块文件
├── run/ # PID文件
└── state/ # 状态文件/var/www/html/ # 默认网站根目录
/var/log/httpd/ # 日志目录(access_log, error_log)
五、基础配置详解
通过编辑主配置文件进行基本设置:
sudo vim /etc/httpd/conf/httpd.conf
常见配置项说明:
# 全局配置
ServerRoot "/etc/httpd" # 服务器根目录
Listen 80 # 监听端口
User apache # 运行用户
Group apache # 运行组
ServerAdmin webmaster@example.com # 管理员邮箱# 主服务器配置
ServerName www.example.com:80 # 服务器域名
DocumentRoot "/var/www/html" # 网站根目录
ErrorLog "logs/error_log" # 错误日志路径# 目录权限设置
<Directory "/var/www/html">Options Indexes FollowSymLinks # 允许目录列表和符号链接AllowOverride None # 是否允许.htaccess覆盖Require all granted # 访问控制
</Directory># 日志格式定义
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
六、虚拟主机配置
虚拟主机允许在单台服务器上运行多个网站。
1.创建网站目录结构:
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.com/public_html
sudo chown -R apache:apache /var/www/example.com
sudo chown -R apache:apache /var/www/test.com
2.创建虚拟主机配置文件:
sudo vim /etc/httpd/conf.d/vhosts.conf
示例配置:
# 第一个虚拟主机
<VirtualHost *:80>ServerAdmin admin@example.comServerName example.comServerAlias www.example.comDocumentRoot /var/www/example.com/public_htmlErrorLog /var/log/httpd/example.com-error.logCustomLog /var/log/httpd/example.com-access.log combined<Directory "/var/www/example.com/public_html">Options -Indexes +FollowSymLinksAllowOverride AllRequire all granted</Directory># 重定向非www到wwwRewriteEngine OnRewriteCond %{HTTP_HOST} ^example\.com [NC]RewriteRule ^(.*)$ http://www.example.com$1 [L,R=301]
</VirtualHost># 第二个虚拟主机
<VirtualHost *:80>ServerName test.comDocumentRoot /var/www/test.com/public_html...
</VirtualHost>
七、安全加固配置
1.隐藏服务器信息:
# 在httpd.conf中添加
ServerTokens Prod # 仅显示Apache
ServerSignature Off # 关闭页脚签名
TraceEnable Off # 禁用TRACE方法
2.限制敏感目录访问:
<DirectoryMatch "^/.*/\.(svn|git|ht)/">Require all denied
</DirectoryMatch><Files ".ht*">Require all denied
</Files>
3.禁用不必要的HTTP方法:
<Location "/"><LimitExcept GET POST HEAD>Deny from all</LimitExcept>
</Location>
八、SSL/TLS 配置(启用 HTTPS)
1.安装 SSL 模块:
sudo yum install -y mod_ssl openssl
2.生成证书(生产环境建议使用 Let's Encrypt):
# 创建证书目录
sudo mkdir /etc/httpd/ssl
sudo chmod 700 /etc/httpd/ssl# 生成自签名证书(测试用)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/httpd/ssl/server.key \-out /etc/httpd/ssl/server.crt \-subj "/C=CN/ST=Beijing/L=Beijing/O=Example Inc/CN=example.com"
3.配置 HTTPS 虚拟主机:
<VirtualHost *:443>ServerName example.comDocumentRoot "/var/www/example.com/public_html"SSLEngine onSSLCertificateFile /etc/httpd/ssl/server.crtSSLCertificateKeyFile /etc/httpd/ssl/server.key# 强制HTTP跳转到HTTPSRewriteEngine OnRewriteCond %{HTTPS} offRewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]# 启用HSTSHeader always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</VirtualHost>
九、性能优化配置
1.调整 MPM 模块(多处理模块):
sudo vim /etc/httpd/conf.modules.d/00-mpm.conf
选择事件驱动模式(适合高并发):
LoadModule mpm_event_module modules/mod_mpm_event.so
相关参数调整:
<IfModule mpm_event_module>StartServers 3MinSpareThreads 75MaxSpareThreads 250ThreadsPerChild 25MaxRequestWorkers 400MaxConnectionsPerChild 0
</IfModule>
2.启用内容压缩:
LoadModule deflate_module modules/mod_deflate.so<IfModule mod_deflate.c>AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascriptDeflateCompressionLevel 6SetOutputFilter DEFLATE
</IfModule>
3.启用缓存控制:
LoadModule expires_module modules/mod_expires.so<IfModule mod_expires.c>ExpiresActive OnExpiresByType image/jpg "access plus 1 month"ExpiresByType text/css "access plus 1 week"ExpiresDefault "access plus 2 days"
</IfModule>
十、测试与验证
1.创建测试页面:
sudo bash -c 'cat > /var/www/html/index.html <<EOF
<!DOCTYPE html>
<html>
<head><title>Apache Test Page</title><meta charset="UTF-8">
</head>
<body><h1>Apache HTTP Server Works!</h1><p>Server time: <?php echo date("Y-m-d H:i:s"); ?></p>
</body>
</html>
EOF'
2.检查配置文件语法:
sudo httpd -t
3.重新加载配置:
sudo systemctl reload httpd
# 或完全重启
sudo systemctl restart httpd
4.访问测试:
- 本地测试:
curl http://localhost
- 远程访问:浏览器输入服务器IP或域名
十一、故障排除指南
1.常见问题排查命令:
# 查看错误日志
sudo tail -50 /var/log/httpd/error_log# 查看访问日志
sudo tail -f /var/log/httpd/access_log# 测试端口连通性
telnet your-server-ip 80
nc -zv your-server-ip 80# SELinux相关检查
sudo ausearch -m avc -ts recent # 查看安全事件
sudo sealert -a /var/log/audit/audit.log # 分析SELinux问题
2.SELinux 配置(生产环境建议保持开启):
# 临时设置
sudo setenforce 0 # 宽松模式
sudo setenforce 1 # 强制模式# 永久设置(编辑/etc/selinux/config)
SELINUX=enforcing # 强制模式
SELINUX=permissive # 仅记录不阻止
SELINUX=disabled # 完全禁用# 调整文件上下文标签
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
十二、进阶配置选项
1.URL 重写(mod_rewrite):
LoadModule rewrite_module modules/mod_rewrite.so<Directory "/var/www/html">RewriteEngine On# 示例1:重定向旧URLRewriteRule ^oldpage\.html$ newpage.html [R=301,L]# 示例2:隐藏.php扩展名RewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}\.php -fRewriteRule ^(.*)$ $1.php [L]
</Directory>
2.反向代理配置:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so<Location "/app/">ProxyPass http://localhost:8080/ProxyPassReverse http://localhost:8080/
</Location>
3.HTTP/2 支持(需要 httpd 2.4.17+):
sudo yum install -y mod_http2
配置示例:
LoadModule http2_module modules/mod_http2.soProtocols h2 http/1.1<VirtualHost *:443>...Protocols h2 http/1.1H2Direct on
</VirtualHost>
4.日志分析工具集成:
# 安装GoAccess日志分析工具
sudo yum install -y goaccess# 生成HTML报告
goaccess /var/log/httpd/access_log -a -o /var/www/html/report.html
十三、维护与管理
1.日常维护命令:
# 检查配置更改
sudo apachectl configtest# 优雅重启(不中断连接)
sudo apachectl graceful# 查看已加载模块
sudo apachectl -M# 查看完整配置
sudo apachectl -S
2.日志轮转配置:
sudo vim /etc/logrotate.d/httpd
示例配置:
/var/log/httpd/*log {dailymissingokrotate 30compressdelaycompressnotifemptysharedscriptspostrotate/bin/systemctl reload httpd > /dev/null 2>/dev/null || trueendscript
}
3.监控设置:
# 安装mod_status用于服务器状态监控
sudo yum install -y mod_status
配置示例:
<Location "/server-status">SetHandler server-statusRequire ip 192.168.1.0/24 # 限制访问IP
</Location>
十四、备份与恢复
1.重要文件备份:
# 备份配置文件
sudo tar czvf httpd_conf_backup.tar.gz /etc/httpd/# 备份网站数据
sudo tar czvf web_content_backup.tar.gz /var/www/# 备份SSL证书
sudo tar czvf ssl_certs_backup.tar.gz /etc/httpd/ssl/
2.恢复步骤:
# 停止服务
sudo systemctl stop httpd# 恢复配置
sudo tar xzvf httpd_conf_backup.tar.gz -C /# 恢复网站内容
sudo tar xzvf web_content_backup.tar.gz -C /# 恢复证书
sudo tar xzvf ssl_certs_backup.tar.gz -C /# 重启服务
sudo systemctl start httpd
通过以上完整配置,您已经成功部署了一个功能全面、安全可靠的 Apache HTTP Server。根据实际业务需求,可以进一步调整和优化各项参数。