一、实验目的
通过本实验,您将掌握以下技能:
- Apache HTTPD 服务的安装与基础配置
- 虚拟主机的配置(基于端口、IP、域名)
- SSL/TLS 加密配置(HTTPS)
- PHP 环境搭建与集成
- 负载均衡与反向代理配置(mod_proxy)
- 日志管理与性能优化
- 常见问题排查与安全加固
二、实验环境
-
操作系统:CentOS 7(2 台虚拟机:Server 和 Client)
-
网络配置:
-
Server:IP 192.168.1.100
-
Client:IP 192.168.1.101
-
软件要求:
# Server 端
yum install -y httpd mod_ssl php php-mysqlnd mariadb-server
# Client 端
yum install -y curl wget
三、实验准备
1. 更换软件源
# 备份原有源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载阿里云源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除缓存并更新
yum clean all && yum makecache
2. 关闭防火墙与 SELinux(测试环境)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
3. 启动服务并设置开机自启
systemctl start httpd mariadb
systemctl enable httpd mariadb
四、实验步骤
(一)基础配置与验证
1. 配置主站点
# 创建测试页面
echo "Hello HTTPD" > /var/www/html/index.html
# 测试访问
curl http://192.168.1.100
2. 修改配置文件
vi /etc/httpd/conf/httpd.conf
关键配置项:
ServerName www.example.com:80
DocumentRoot "/var/www/html"
DirectoryIndex index.html index.php
3. 验证配置语法
httpd -t
(二)虚拟主机配置
1. 基于端口的虚拟主机
# 创建配置文件
vi /etc/httpd/conf.d/port-based.conf
配置内容:
<VirtualHost *:8080>
DocumentRoot "/var/www/port8080"
ServerName port8080.example.com
ErrorLog "logs/port8080_error.log"
CustomLog "logs/port8080_access.log" combined
</VirtualHost>
# 创建目录并测试
mkdir -p /var/www/port8080
echo "Port 8080" > /var/www/port8080/index.html
2. 基于域名的虚拟主机
# 创建配置文件
vi /etc/httpd/conf.d/name-based.conf
配置内容:
<VirtualHost *:80>
DocumentRoot "/var/www/web1"
ServerName web1.example.com
ServerAlias www.web1.example.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/web2"
ServerName web2.example.com
</VirtualHost>
# 在 Client 端添加域名解析
echo "192.168.1.100 web1.example.com web2.example.com" >> /etc/hosts
(三)SSL/TLS 加密配置
1. 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/pki/tls/private/server.key \
-out /etc/pki/tls/certs/server.crt
2. 配置 HTTPS 虚拟主机
vi /etc/httpd/conf.d/ssl.conf
关键配置项:
<VirtualHost *:443>
DocumentRoot "/var/www/https"
ServerName secure.example.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
</VirtualHost>
3. 强制 HTTP 跳转 HTTPS
<VirtualHost *:80>
ServerName secure.example.com
Redirect permanent / https://secure.example.com/
</VirtualHost>
(四)PHP 环境集成
1. 安装 PHP 及扩展
yum install -y php php-mysqlnd php-gd php-xml php-mbstring
2. 创建测试页面
vi /var/www/html/phpinfo.php
内容:
<?php
phpinfo();
?>
3. 配置 PHP 时区
vi /etc/php.ini
修改:
date.timezone = Asia/Shanghai
(五)负载均衡与反向代理
1. 安装负载均衡模块
yum install -y mod_proxy mod_proxy_balancer
2. 配置负载均衡池
vi /etc/httpd/conf.d/balancer.conf
配置内容:
<Proxy balancer://web_cluster>
BalancerMember http://192.168.1.100:8080 loadfactor=2
BalancerMember http://192.168.1.100:8081 loadfactor=1
ProxySet lbmethod=bytraffic
</Proxy>
<VirtualHost *:80>
ServerName lb.example.com
ProxyPass / balancer://web_cluster/
ProxyPassReverse / balancer://web_cluster/
</VirtualHost>
(六)日志管理与性能优化
1. 配置日志轮转
vi /etc/logrotate.d/httpd
配置内容:
/var/log/httpd/*.log {
daily
rotate 4
compress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
2. 启用缓存与压缩
vi /etc/httpd/conf/httpd.conf
添加配置:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 day"
ExpiresByType image/jpeg "access plus 1 week"
</IfModule>
五、实验验证
1. 服务状态检查
systemctl status httpd
2. 端口监听验证
netstat -tuln | grep :80
3. 日志分析
tail -f /var/log/httpd/access_log
4. 安全测试
# SSL 证书验证(Client 端)
openssl s_client -connect 192.168.1.100:443
六、常见问题排查
1. 服务启动失败
journalctl -u httpd -b
2. 403 禁止访问
# 检查目录权限
ls -ld /var/www/html
# 检查 SELinux 上下文
semanage fcontext -l | grep httpd
3. PHP 不生效
# 检查 httpd.conf 是否加载 PHP 模块
grep php7_module /etc/httpd/conf/httpd.conf
七、安全加固建议
- 禁用不安全协议:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
- 限制访问 IP:
<Directory "/var/www/html">
Require ip 192.168.1.0/24
</Directory>
- 关闭目录索引:
Options -Indexes
- 隐藏服务器信息:
ServerSignature Off
八、实验总结
通过本实验,您已掌握 CentOS 7 上 HTTPD 服务的完整配置流程,包括基础服务搭建、虚拟主机、SSL 加密、PHP 集成、负载均衡、日志管理及安全优化。实际应用中需根据业务需求调整配置,并定期进行安全审计和性能监控。