Linux Apache服务器的应用与管理

引导

  • 了解常用Web服务器软硬件平台
  • 掌握Apache服务器的安装和启停控制
  • 熟悉Apache服务器配置文件结构
  • 掌握Apache访问控制和用户授权机制
  • 熟悉SELinux对Apache服务的影响
  • 掌握Apache虚拟主机配置方法

Apache作为全球使用最广泛的Web服务器软件,具备以下核心优势:

  • 跨平台支持:可运行于Linux、Windows、Unix等主流操作系统
  • 高安全性:严格的权限控制和模块化安全机制
  • 灵活扩展:支持Perl/Python等解释器,可通过API扩展功能
  • 高性能:优化的多道处理模块(MPM)支持高并发访问
  • 开源免费:采用Apache许可证,允许商业应用

本项目将系统介绍Apache服务器的安装配置、安全加固及虚拟主机技术,重点解析SELinux与Apache的协同工作机制。


##实施

1:Apache服务器基础配置

1.1:安装与启停控制

  1. 安装流程

    # RHEL/CentOS系统安装
    yum install httpd -y
    
    # 验证安装
    httpd -v
    # 输出: Server version: Apache/2.4.6 (Red Hat Enterprise Linux)
    
  2. 核心文件路径

    文件类型路径
    主配置文件/etc/httpd/conf/httpd.conf
    默认网站根目录/var/www/html
    访问日志/var/log/httpd/access_log
    模块存储目录/usr/lib/httpd/modules
  3. 服务管控命令

    systemctl start httpd       # 启动服务
    systemctl enable httpd      # 开机自启
    apachectl restart           # 重启服务(配置生效)
    
  4. 基础测试

    echo "Apache Test Page" > /var/www/html/index.html
    curl http://localhost      # 应返回"Apache Test Page"
    

1.2:配置文件深度解析

Apache主配置文件 /etc/httpd/conf/httpd.conf采用模块化结构:

1. 全局环境配置

ServerRoot "/etc/httpd"     # 配置/日志文件根目录
Listen 80                   # 监听端口
User apache                 # 运行用户(非root)
Group apache                # 运行组

2. 主服务器配置

ServerAdmin root@localhost        # 管理员邮箱
DocumentRoot "/var/www/html"      # 网站根目录
DirectoryIndex index.html         # 默认首页搜索顺序
ErrorLog "logs/error_log"         # 错误日志路径
CustomLog "logs/access_log" combined # 访问日志格式

3. 安全增强配置

<Directory />
    AllowOverride none
    Require all denied      # 禁止根目录访问
</Directory>

<Files ".ht*">
    Require all denied      # 屏蔽.htaccess访问
</Files>

4. 性能优化参数

Timeout 60                  # 连接超时(秒)
KeepAlive On                # 启用持久连接
MaxKeepAliveRequests 100    # 单连接最大请求数
KeepAliveTimeout 15         # 连接保持时间

关键指令说明:

  • Options Indexes FollowSymLinks:允许目录列表和符号链接
  • AllowOverride None:禁用.htaccess覆盖配置
  • LogFormat:定义日志记录格式(详见日志参数表)

2:访问控制与用户认证

2.1:基于主机的访问控制

Apache 2.4+采用mod_authz_host模块实现精细化控制:

典型配置案例

<Directory "/var/www/html/protected">
    # 仅允许特定IP段访问
    Require ip 192.168.1.0/24
    # 允许域名访问
    Require host example.com
    # 拒绝特定主机
    Require not host hacker.com
</Directory>

2.2:用户认证与授权

基础认证配置流程

  1. 创建密码文件
    mkdir /etc/httpd/passwords
    htpasswd -c /etc/httpd/passwords/webusers user1
    
  2. 配置认证域
    <Directory "/var/www/html/secure">
        AuthType Basic
        AuthName "Restricted Area"
        AuthUserFile /etc/httpd/passwords/webusers
        Require valid-user
    </Directory>
    
  3. 权限设置
    chown apache:apache /etc/httpd/passwords/webusers
    chmod 640 /etc/httpd/passwords/webusers
    

3:SELinux与Apache集成

3.1:自定义网站目录

当网站目录变更时需同步SELinux策略:

# 1. 修改主配置
sed -i 's|/var/www/html|/data/webroot|g' /etc/httpd/conf/httpd.conf

# 2. 创建新目录
mkdir -p /data/webroot
echo "New Web Root" > /data/webroot/index.html

# 3. 设置SELinux上下文
semanage fcontext -a -t httpd_sys_content_t "/data/webroot(/.*)?"
restorecon -Rv /data/webroot

3.2:开启个人用户主页

  1. 启用模块
    # /etc/httpd/conf.d/userdir.conf
    UserDir public_html
    
  2. 用户端配置
    su - user1
    mkdir ~/public_html
    echo "User1 Homepage" > ~/public_html/index.html
    chmod 711 ~
    chmod 755 ~/public_html
    
  3. SELinux策略
    setsebool -P httpd_enable_homedirs=on
    

4:虚拟主机配置实践

4.1:基于IP的虚拟主机

<VirtualHost 192.168.1.10:80>
    DocumentRoot /var/www/site1
    ServerName site1.example.com
    ErrorLog logs/site1_error.log
    CustomLog logs/site1_access.log combined
</VirtualHost>

<VirtualHost 192.168.1.20:80>
    DocumentRoot /var/www/site2
    ServerName site2.example.com
</VirtualHost>

4.2:基于域名的虚拟主机

# /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
    ServerName www.domain.com
    DocumentRoot /var/www/domain
</VirtualHost>

<VirtualHost *:80>
    ServerName shop.domain.com
    DocumentRoot /var/www/shop
</VirtualHost>

关键步骤

# 1. 创建网站目录
mkdir -p /var/www/{domain,shop}

# 2. 设置SELinux上下文
semanage fcontext -a -t httpd_sys_content_t "/var/www/domain(/.*)?"
restorecon -Rv /var/www/domain

# 3. 本地域名解析
echo "192.168.1.100 www.domain.com shop.domain.com" >> /etc/hosts