安装 Apache 后,需要对配置文件进行自定义的设置。首先进入到 Apache 的安装目录(通常为 /usr/local/apache),这里有 4 个最常用的核心文件夹,理解它们的作用是配置的第一步:
bin:二进制可执行文件目录,用于控制 Apache 服务。添加环境变量后,可直接在终端使用以下命令:
ab:Apache Bench,自带的压力测试工具。apachectl:控制 Apache 启动/停止的脚本,实际调用 httpd 命令。apxs:APache eXtenSion tool,用于编译和安装扩展模块。htpasswd:建立 Basic 认证文件,设置 Web 访问的账号密码。httpd:Apache 的核心控制命令。rotatelogs:自带的日志轮询/切割工具。
conf:用于存储 Apache 服务的配置文件。
httpd.conf:主配置文件,核心中的核心。extra:辅助配置文件目录,包含 vhost、ssl 等子配置。
- htdocs:默认的站点根目录,安装后里面默认的
index.html就是你看到的 "It works!" 页面。 - logs:默认的日志文件存储目录(访问日志和错误日志)。
1. 主配置文件 (httpd.conf)
在安装 Apache 的时候我们已经保留了一份主配置文件。编辑 conf/httpd.conf,主要关注以下几点:
- 服务器根目录:
ServerRoot "根目录",指示 Apache 在哪个目录下寻找配置文件和模块。 - 侦听端口:
Listen指令。可以删除或注释掉,建议统一在辅助文件中配置,保持主配置简洁。 - 加载模块:
LoadModule ... .so。根据后续需求开启(去掉行首的#),例如 rewrite、ssl、http2 等模块。 运行用户和组:
User daemon,Group daemon。
强烈建议修改运行用户和组为特定用户(如apache),否则后续站点文件可能出现权限问题无法更新,且使用 root 运行极不安全:# 创建系统用户组 apache groupadd -r apache # 创建系统用户,不创建家目录,禁止登录 useradd -r -g apache -s /sbin/nologin -d /apache -M apache # 更改目录所有者 chown -R apache:apache /usr/local/apache # 修改权限 (注意:777 权限在生产环境有极大安全风险,建议使用 755) chmod 755 -R /usr/local/apache- 管理员邮箱:
ServerAdmin,建议在辅助文件中针对每个站点单独配置。 - 权限控制:
Directory标签,建议在辅助文件中配置。 - 站点根目录:
DocumentRoot,建议在辅助文件中配置。 - 默认首页:
DirectoryIndex,通常设置为index.html index.php。
2. 辅助配置文件
为了管理方便,我们通常不直接塞满主配置文件,而是启用辅助配置。请在 httpd.conf 中找到以下几行,删除行首的 # 号以启用它们:
Include conf/extra/httpd-vhosts.confInclude conf/extra/httpd-mpm.confInclude conf/extra/httpd-ssl.conf
2.1 虚拟主机设置 (httpd-vhosts.conf)
此配置文件用于配置虚拟主机(Virtual Host)。当配置多个虚拟主机时,Apache 会对每一个请求进行判断,匹配 IP、端口、ServerName 或 ServerAlias,并做出对应响应。
常见的虚拟主机模式:
- 基于 IP:多网卡或多 IP 环境,通过请求的 IP 地址区分。
- 基于域名(最常用):多个域名解析到同一个 IP,通过 Host 请求头区分。
- 基于端口:不同站点监听不同端口(如 8080, 8081)。
常见配置示例:
# 侦听端口 (支持 IPv4 和 IPv6) Listen 80 # 开启 HTTP/2 支持 (需在主配置开启 mod_http2) Protocols h2 h2c http/1.1 # 目录访问权限控制模板 <Directory "/data/wwwroot"> # 跟随符号链接 (软链接) Options FollowSymLinks # 是否允许 .htaccess 文件覆盖配置 (固定链接通常需要开启为 All) AllowOverride All # 访问控制 Require all granted </Directory> # 虚拟主机配置示例 <VirtualHost *:80> ServerName https://www.example.com ServerAlias example.com DocumentRoot "/data/wwwroot/example" # 日志文件 ErrorLog "logs/example-error_log" CustomLog "logs/example-access_log" common </VirtualHost>高级技巧:禁止 IP 直接访问:
<VirtualHost *:80> ServerName 192.168.1.1 <Location /> Require all denied </Location> # 或者使用重定向将流量引流到域名 # RedirectPermanent / https://www.example.com/ </VirtualHost>
2.2 并发控制 (httpd-mpm.conf)
Apache 的性能核心在于 MPM(多路处理模块)。默认通常使用 event 模式(在 Apache 2.4+ 中性能最佳)。
三种模式简介:
- prefork:非线程、多进程。稳定但内存消耗大,适合非线程安全的 PHP 模块。
- worker:多进程、多线程。内存消耗少,并发高。
- event:worker 的升级版,引入了 Epoll 事件处理机制,专门解决 Keep-Alive 场景下的资源占用问题。
Event 模式参数调优:
<IfModule mpm_event_module> # 主服务能创建的最大子进程数量 ServerLimit 16 # 启动时创建的子进程数量 StartServers 3 # 最小空闲线程数,意味着小于该空闲线程时即开启新的进程 MinSpareThreads 75 # 最大空闲线程数,意味着大于该空闲线程时即销毁一个进程 MaxSpareThreads 250 # 每个子进程产生的线程数 (64的倍数推荐),当开启一个进程时即会打包开启的子线程数量 ThreadsPerChild 64 # 同时处理的最大请求数量 (ServerLimit * ThreadsPerChild) MaxRequestWorkers 1024 # 子进程生命周期内处理的最大请求数 (0表示永不回收,建议设置数值以防内存泄漏) MaxConnectionsPerChild 10000 </IfModule>
2.3 HTTPS 安全配置 (httpd-ssl.conf)
此配置文件用于启用 SSL/HTTPS。前提:在主配置文件中开启 mod_ssl.so 和 mod_socache_shmcb.so 模块。
域名与证书准备:
- 建议使用 Cloudflare 管理 DNS(注意:国内 VPS 使用 Cloudflare 可能会导致被墙或减速)。
- 申请证书后,将
fullchain.pem(公钥/证书链) 和privkey.pem(私钥) 上传至服务器安全目录。
SSL 核心配置:
# 监听 443 端口 Listen 443 # 全局 SSL 设置 SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES SSLHonorCipherOrder on SSLSessionTickets on # 仅允许安全的 TLS 协议 SSLProtocol -all +TLSv1.2 +TLSv1.3 SSLProxyProtocol -all +TLSv1.2 +TLSv1.3 # SSL 会话缓存 (需开启 mod_socache_shmcb) SSLSessionCache "shmcb:logs/ssl_scache(512000)" # 虚拟主机配置 <VirtualHost *:443> ServerName https://www.example.com DocumentRoot "/data/wwwroot/example" SSLEngine on # 证书路径配置 SSLCertificateFile "/usr/local/apache/conf/ssl/fullchain.pem" SSLCertificateKeyFile "/usr/local/apache/conf/ssl/privkey.pem" # 推荐的现代加密套件 (兼容性与安全性平衡) SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 <Directory "/data/wwwroot/example"> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>HTTP 自动跳转 HTTPS:
可以在 Cloudflare 后台开启 "Always Use HTTPS",或者在 Apache 的 80 端口虚拟主机中配置 Rewrite:RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R=301]