Apache服务器的配置不是一揽子操作,而是围绕虚拟主机、目录权限、模块、性能、日志和SSL这几条主线展开。 只要理清这几个模块,你就能根据业务需求灵活调整,而不是死记配置文件。
Apache虚拟主机配置方法,基于域名部署多个站点
虚拟主机是Apache最常用的功能,目的是在一台机器上托管多个网站,你只需要在配置中添加虚拟主机块,每个块对应一个域名和目录。
配置前的准备
- 确认Apache版本,多数Linux发行版使用2.4,命令
apache2 -v可查看。 - 准备域名解析,让域名指向服务器IP。
- 创建站点根目录,例如
/var/www/example。
基于域名的虚拟主机配置步骤
- 编辑主配置文件
httpd.conf或apache2.conf,找到Include相关行,打开虚拟主机配置文件:Include conf/extra/httpd-vhosts.conf - 打开
httpd-vhosts.conf,清空示例内容,添加以下块:<VirtualHost :80> ServerName example.com DocumentRoot /var/www/example <Directory /var/www/example> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost> - 执行
apachectl configtest检查语法,再重启服务:systemctl restart apache2。
常见报错是ServerName没写,或目录权限被拒绝,前者加一行ServerName即可,后者检查目录权限和SELinux状态。
Apache服务器配置详解:目录权限的核心写法
目录权限是Apache安全配置里最容易忽略的环节。<Directory>指令控制着某个目录下能执行什么操作,AllowOverride决定.htaccess能否覆盖当前配置。
Options控制目录特性,如FollowSymLinks允许跟随符号链接,Indexes允许显示目录列表,后者建议关闭。Require用于访问控制。Require all granted代表允许所有人,Require ip 192.168.1.0/24代表只允许内网访问。AllowOverride All开启后,.htaccess文件才有效,但会带来性能损耗,能写在虚拟主机里就别用。.htaccess
Apache核心模块配置,按需启用避免多余开销
Apache的功能靠模块撑起来,模块不是开得越多越好,每加载一个都会占用内存,生产环境里,你应该先禁用用不到的模块,再按需开启。
查看当前加载了哪些模块
执行apache2ctl -M会列出所有已编译进二进制的模块,输出中带shared的表示动态加载,static的表示编译进核心,如果你看到status_module运行时不需要,就可以关掉。
在Debian/Ubuntu系列上,模块管理命令非常直观:
a2enmod rewrite启用rewrite模块a2dismod autoindex禁用autoindex模块- 修改后执行
systemctl reload apache2生效
CentOS/RHEL系列没有a2enmod,你需要手动编辑httpd.conf,在LoadModule行前加注释即可禁用一个模块。
三个常用模块及配置场景
mod_rewrite:用于URL重写和伪静态,WordPress的固定链接依赖它。mod_headers:可以修改HTTP响应头,比如添加X-Content-Type-Options。mod_expires:设置静态资源缓存过期时间,减轻源站压力。
举个例子,用mod_expires设置图片缓存一个月:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 30 days"
</IfModule>
模块配置的关键是改完先apachectl configtest,再reload,不要让错误配置直接重启,否则会中断在线业务。
Apache性能优化配置,让网站在高并发下更稳定
性能优化是Apache配置中技术含量较高的部分,主要有三个方向:进程模型、模块裁剪、缓存层,行业共识认为,Apache的调优不能只看参数,要结合服务器内存和业务特点。
prefork、worker与event三种MPM怎么选
Apache提供多种多进程处理模块(MPM),不同版本默认不同。
| MPM模式 | 线程支持 | 适用场景 | 内存占用 |
|---|---|---|---|
| prefork | 无线程 | 兼容老模块,如mod_php |
较高 |
| worker | 多线程 | 混合动态请求 | 较低 |
| event | 事件驱动 | 高并发长连接 | 最低 |
- 如果使用mod_php,只能选prefork,因为PHP老版本不是线程安全的。
- 如果使用PHP-FPM,推荐event或worker。
- 内存有限的小型服务器,event模式更合理。
切换MPM后,需要调整prefork.c或event.c中的关键参数:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 10000
</IfModule>
MaxRequestWorkers是核心参数,代表最大并发进程数,业内专家指出,这个值要根据服务器内存和单进程占用大小推算,盲目调大会导致交换分区频繁使用。
启用mod_cache做页面缓存
Apache的mod_cache支持磁盘和内存缓存,对于WordPress这类动态站点,可以缓存静态资源。
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_disk_cache.so
<IfModule mod_cache.c>
CacheDefaultExpire 3600
CacheEnable disk /
CacheRoot /var/cache/apache/mod_cache
</IfModule>
注意缓存目录需要由Apache进程写入,创建后设置属主为www-data。
Apache与Nginx对比,按场景选型更合理
很多人在配置服务器时都会纠结Apache还是Nginx,Apache配置灵活,模块丰富;Nginx并发能力强,静态文件处理快。
| 对比项 | Apache | Nginx |
|---|---|---|
| 配置修改 | 支持.htaccess,可运行时修改 | 需要reload,不支持.htaccess |
| 动态语言支持 | 直接模块绑定 | 通过FastCGI |
| 高并发静态文件 | 一般 | 优异 |
| 模块生态 | 非常庞大 | 相对精简 |
| 学习曲线 | 平缓 | 中等 |
如果你的项目依赖.htaccess,或者你用共享主机,Apache更省心,如果追求极致并发,而且主要提供API或静态资源,Nginx优势明显,没有绝对好坏,只有是否匹配场景。
Apache配置SSL证书,让网站自动跳转HTTPS
HTTPS已经成为标配,Apache配置SSL证书主要分三步:获得证书、修改虚拟主机、强制跳转。
- 将证书文件和私钥文件上传到服务器,常见路径为
/etc/ssl/。 - 在
httpd-ssl.conf或虚拟主机中添加监听443的配置:<VirtualHost :443> ServerName example.com DocumentRoot /var/www/example SSLEngine on SSLCertificateFile /etc/ssl/example.crt SSLCertificateKeyFile /etc/ssl/example.key </VirtualHost> - 启用SSL模块和重写模块,然后在80端口的虚拟主机中添加重定向:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
完成上述配置后,apachectl configtest通过就可以重启,证书续期时,只需要覆盖证书文件再reload。
Apache配置的核心思路是模块化,你不需要记下所有指令,只需掌握虚拟主机、目录权限、性能、SSL这些骨架,遇到问题再查模块文档,就能在生产环境中稳扎稳打。
Apache配置常见问题解答
Apache虚拟主机配置不生效怎么办?
首先检查apachectl -S输出的虚拟主机列表,看是否包含预期域名,如果缺少,大概率是Include路径没打开,或者配置文件语法错误,浏览器可能缓存了旧DNS或旧连接,可以先用curl -H "Host: example.com" http://服务器IP测试。
Apache启动时报“Address already in use”怎么处理?
该报错说明端口被其他进程占用,用ss -lntp | grep :80查找占用进程,然后结束冲突进程,如果服务器启用了Nginx,需要先关闭Nginx或修改端口,也可能Apache自身重复启动,用systemctl restart apache2会先停止旧进程,通常能解决。
Apache与Nginx哪个更适合小型服务器?
小型服务器内存通常在1GB到2GB之间,Apache的event模式配合PHP-FPM可以做到稳定运行,Nginx则以更低内存占用完成同样任务,如果你的网站依赖Apache的.htaccess或某些特有模块,选Apache;否则Nginx更轻,没有标准答案,取决于你现有代码的兼容性。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/715121.html





