Apache HTTP服务器 实战教程

作为Web开发入门首选的老牌开源服务器,Apache HTTP Server(以下简称Apache)凭借跨平台、模块化、稳定易用的特性,至今仍在全球保持30%以上的市场份额。本文聚焦新手/小团队常用的核心场景,用精简的步骤和代码带你快速上手。


1. 快速安装与启动

我们覆盖最主流的3种环境:Linux、Docker和Docker Compose(便于统一管理)。

1.1 Linux原生安装

Linux是Apache的黄金搭档,不同发行版仅需调整包管理器即可。

Ubuntu/Debian系

# 更新源并安装
sudo apt update && sudo apt install -y apache2

# 核心操作
sudo systemctl start apache2    # 启动
sudo systemctl enable apache2   # 开机自启
sudo systemctl status apache2   # 检查状态
apache2 -v                       # 查看版本

CentOS/RHEL系

# 安装(CentOS8+/RHEL8+用dnf)
sudo dnf install -y httpd

# 核心操作
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl status httpd
httpd -v

安装成功后,访问服务器IP(80端口)就能看到Apache的默认欢迎页!


1.2 Docker/Docker Compose一键部署

适合本地测试、开发环境隔离或快速搭建微服务网关。

Docker单容器

# 拉取官方最新镜像
docker pull httpd:latest

# 启动(挂载本地目录简化配置修改)
docker run -d \
  --name my-local-apache \
  -p 8080:80 \
  -p 8443:443 \
  -v $(pwd)/html:/usr/local/apache2/htdocs \
  -v $(pwd)/logs:/usr/local/apache2/logs \
  httpd:latest

启动后访问 http://localhost:8080 即可,本地 html/ 目录下的文件会直接作为Web根目录内容。


2. 核心基础配置

Apache的核心配置分全局配置虚拟主机配置,Linux原生和Docker部署的路径不同:

环境全局配置路径虚拟主机路径(Ubuntu为例)Docker挂载后配置路径
Ubuntu/Debian/etc/apache2/apache2.conf/etc/apache2/sites-available/需单独挂载 /usr/local/apache2/conf/

2.1 全局配置的关键优化

全局配置不用大改,新手只需要调整这3个地方提高安全性和易用性:

# 1. 隐藏Apache版本号(防止攻击者利用已知漏洞)
ServerTokens Prod
ServerSignature Off

# 2. 启用 KeepAlive(减少TCP握手次数,提升静态资源加载速度)
KeepAlive On
MaxKeepAliveRequests 100  # 单次连接最多请求数
KeepAliveTimeout 5        # 空闲连接超时时间(秒)

# 3. 启用常用核心模块(后续配置会用到)
# Ubuntu/Debian用 a2enmod 命令更方便:a2enmod rewrite deflate headers ssl
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

2.2 虚拟主机配置(最常用!)

虚拟主机可以让一台服务器托管多个域名/站点,我们以Ubuntu为例配置HTTP基础虚拟主机

步骤1:创建站点目录与测试文件

# 为站点创建专属目录(建议按域名命名)
sudo mkdir -p /var/www/example.com/html
# 修改权限让Apache能访问
sudo chown -R www-data:www-data /var/www/example.com
# 创建测试首页
sudo nano /var/www/example.com/html/index.html

测试首页内容:

<!DOCTYPE html>
<html>
<head><title>Hello Apache!</title></head>
<body><h1>Welcome to example.com!</h1></body>
</html>

步骤2:编写虚拟主机配置

# 创建配置文件 /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    # 站点基础信息
    ServerName example.com
    ServerAlias www.example.com  # 别名,多个域名指向同一站点
    DocumentRoot /var/www/example.com/html

    # 目录权限与特性
    <Directory "/var/www/example.com/html">
        Options Indexes FollowSymLinks  # 允许列目录(可选,生产环境建议关Indexes)
        AllowOverride All                # 允许用 .htaccess 覆盖配置(SEO重写必备)
        Require all granted              # 允许所有人访问
    </Directory>

    # 日志配置(便于排查问题)
    ErrorLog ${APACHE_LOG_DIR}/example_error.log
    CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

步骤3:启用配置并重启

# 禁用默认的 000-default.conf(可选,生产环境建议禁用)
sudo a2dissite 000-default.conf
# 启用我们的新配置
sudo a2ensite example.com.conf
# 验证配置语法(重要!避免重启失败)
sudo apache2ctl configtest
# 语法没问题则优雅重启(不影响在线用户)
sudo systemctl reload apache2

3. 实用进阶配置

3.1 Let's Encrypt免费SSL证书(强制HTTPS)

现在HTTPS是标配,Let's Encrypt提供免费90天自动续期的证书,搭配 certbot 工具一键搞定。

Ubuntu安装与配置

# 安装 certbot 和 Apache插件
sudo apt update && sudo apt install -y certbot python3-certbot-apache

# 一键获取证书并配置HTTPS(自动修改虚拟主机配置)
sudo certbot --apache -d example.com -d www.example.com

# 验证自动续期
sudo certbot renew --dry-run

执行 certbot 时会提示输入邮箱、同意协议,最后会问是否强制HTTP跳转到HTTPS,选 2: Redirect 即可!


3.2 URL重写(SEO友好)

.htaccess 实现URL美化,比如把 article.php?id=123 改成 /article/123

步骤1:在站点根目录创建 .htaccess

sudo nano /var/www/example.com/html/.htaccess

步骤2:编写重写规则

RewriteEngine On

# 1. 强制HTTPS(如果certbot没配置成功可以手动加)
# RewriteCond %{HTTPS} off
# RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 2. www跳转到非www(也可以反过来)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 3. 隐藏PHP扩展名
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

# 4. SEO友好的文章链接
RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L]

3.3 Gzip压缩(提升加载速度)

压缩HTML、CSS、JS等文本资源,能减少60%-80%的传输体积,直接在全局配置或虚拟主机配置中加:

<IfModule mod_deflate.c>
    # 启用压缩
    AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript application/json

    # 压缩级别(1-9,推荐6:速度和压缩率平衡)
    DeflateCompressionLevel 6
</IfModule>

4. 最佳实践总结

  1. 安全第一:隐藏版本号、强制HTTPS、禁止列生产环境的目录、用防火墙限制端口。
  2. 性能优先:启用KeepAlive、Gzip压缩、静态资源缓存(可以用 mod_expires 加在 .htaccess 或虚拟主机里)。
  3. 规范管理:虚拟主机按域名命名、配置前先验证语法(apache2ctl configtest)、部署后优雅重启(systemctl reload apache2)。
  4. 日志监控:定期检查错误日志,用 tail -f 实时观察访问量和异常请求。

Apache虽然没有Nginx的高并发性能,但它的模块化架构和丰富的文档对新手更友好,适合部署中小规模的静态站点、博客或作为简单的反向代理。