Ubuntu Apache2配置有哪些技巧
小樊
38
2025-12-24 20:53:10
Ubuntu 上 Apache2 配置实用技巧
一 基础结构与常用模块
- 熟悉 Ubuntu 的目录约定:/etc/apache2/apache2.conf 为全局配置,核心通过 Include 引入:mods-enabled/、sites-enabled/、ports.conf、conf.d/、httpd.conf。虚拟主机通常写在 /etc/apache2/sites-available/,启用时用 a2ensite 域名.conf 软链到 sites-enabled/;模块用 a2enmod/ a2dismod 管理。默认文档根目录通常为 /var/www/。修改后执行 sudo systemctl reload apache2 使配置生效。
二 虚拟主机与端口管理
- 快速新建站点:在 /etc/apache2/sites-available/ 创建如 example.com.conf,设置 ServerName、DocumentRoot、日志与目录权限;使用 a2ensite 启用,必要时 a2dissite 000-default.conf 禁用默认站点。目录权限建议:所有者 www-data:www-data,权限 755。
- 多端口与多站点:在 /etc/apache2/ports.conf 中 Listen 80 与 Listen 443,如需新增端口(如 8080)一并加入;为每个端口创建对应的 VirtualHost 并启用。
- 端口变更示例:将默认 80→90、443→444,需同步修改 ports.conf 与 sites-enabled/000-default 中的 *<VirtualHost :80> 为 <VirtualHost *:90>,然后重启服务。
- 目录访问与安全:在 中使用 AllowOverride All/None(不需要 .htaccess 时设为 None 减少开销),配合 Require all granted 控制访问;静态资源目录可禁用 Indexes 避免目录遍历。
三 性能优化要点
- 启用长连接:在 apache2.conf 中设置 KeepAlive On、MaxKeepAliveRequests 100、KeepAliveTimeout 2(繁忙站点保持低值以减少占用)。
- 选择并调优 MPM:并发与内存是关键。一般 Prefork 兼容性好(如非线程安全 PHP),Event/Worker 更适合高并发。切换示例:禁用 prefork 并启用 event:sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2。示例参数(Event):StartServers 4、MinSpareThreads 25、MaxSpareThreads 75、ThreadsPerChild 25、MaxRequestWorkers 150、MaxConnectionsPerChild 1000(需结合实际压测与内存调整)。
- 压缩与缓存:启用 mod_deflate 压缩文本资源;启用 mod_expires 设置过期头;启用 mod_cache/mod_cache_disk 做磁盘缓存(如:CacheRoot “/var/cache/apache2/mod_cache_disk”、CacheEnable disk /)。
- 连接与超时:适度降低 Timeout(如 5–15 秒)避免长时间挂起;静态资源尽量由 CDN 或反向代理缓存,后端专注动态请求。
四 HTTPS 与反向代理
- 启用 HTTPS 与 HTTP/2:安装 openssl 并启用模块 a2enmod ssl;在 ports.conf 使用 Listen 443 ssl http2。为站点配置证书路径:SSLCertificateFile、SSLCertificateKeyFile、SSLCertificateChainFile。使用 Certbot 自动获取并部署证书:sudo apt install certbot python3-certbot-apache && sudo certbot --apache。
- HTTP 自动跳转 HTTPS:在 :80 虚拟主机中加入重写规则,如:RewriteEngine On、RewriteCond %{HTTPS} off、RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]。
- 反向代理与负载均衡:启用 mod_proxy、mod_proxy_http 等,将请求转发至后端应用,如:ProxyPass “/” “http://127.0.0.1:8088/”、ProxyPassReverse / http://127.0.0.1:8088/;也可代理到 AJP 或上游集群实现负载分担。
五 安全加固与运维
- 隐藏版本信息:设置 ServerTokens Prod、ServerSignature Off,减少信息泄露面。
- 访问控制与状态页:仅在必要时启用 mod_status 并限制访问来源;不需要 .htaccess 的目录将 AllowOverride None,降低解析开销与风险。
- 防火墙与端口:如使用 ufw,放行 Apache 流量:sudo ufw allow ‘Apache’;变更端口后同步放行对应端口。
- 日志与轮转:使用 logrotate 管理 access.log/error.log,避免日志过大影响性能与磁盘;按需调整 LogFormat 与日志级别。
- 变更与验证:每次修改后用 apache2ctl configtest 校验语法,再 systemctl reload apache2;生产变更建议灰度与回滚预案。