Linux实验10-LAMP


一、实验目的

通过本实验,您将掌握以下技能:

  1. Apache HTTPD 服务的安装与基础配置
  2. 虚拟主机的配置(基于端口、IP、域名)
  3. SSL/TLS 加密配置(HTTPS)
  4. PHP 环境搭建与集成
  5. 负载均衡与反向代理配置(mod_proxy)
  6. 日志管理与性能优化
  7. 常见问题排查与安全加固

二、实验环境

  1. 操作系统:CentOS 7(2 台虚拟机:Server 和 Client)

  2. 网络配置

  3. Server:IP 192.168.1.100

  4. Client:IP 192.168.1.101

  5. 软件要求

# 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

七、安全加固建议

  1. 禁用不安全协议
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
  1. 限制访问 IP
<Directory "/var/www/html">
Require ip 192.168.1.0/24
</Directory>
  1. 关闭目录索引
Options -Indexes
  1. 隐藏服务器信息
ServerSignature Off

八、实验总结

通过本实验,您已掌握 CentOS 7 上 HTTPD 服务的完整配置流程,包括基础服务搭建、虚拟主机、SSL 加密、PHP 集成、负载均衡、日志管理及安全优化。实际应用中需根据业务需求调整配置,并定期进行安全审计和性能监控。