Ubuntu 上 Apache2 与 Nginx 的核心差异
一、架构与并发模型
- Apache2(httpd)采用多进程/多线程的 MPM模型,常见有prefork、worker、event。以prefork为例,每个连接通常由一个进程处理,功能丰富但并发增大时内存与进程数开销明显上升。
- Nginx采用事件驱动、异步非阻塞 I/O(Linux 下基于epoll,BSD 下基于kqueue),少量工作进程即可支撑大量并发连接,在高并发静态资源与反向代理场景资源占用更低。
以上差异是两者在性能与资源占用上表现不同的根本原因。
二、静态资源、动态内容与 PHP 集成
- 静态资源:Nginx 对静态文件的吞吐与并发处理通常更优,适合作为CDN 边缘/高并发门户的前端;Apache 能力合格但一般不如 Nginx 极致。
- 动态内容:两者都能处理动态请求。传统上 Apache 可通过mod_php等模块深度集成;Nginx 通常通过FastCGI(如PHP-FPM)与后端应用协作。
- PHP 实践:在 Ubuntu 上,常见组合是Nginx + PHP-FPM或Apache2(prefork)+ mod_php;高并发 API/网站常采用Nginx 前置 + Apache 应用层的混合架构以兼顾性能与灵活性。
三、配置与管理方式
- Apache2 配置:主配置在**/etc/apache2/apache2.conf**;虚拟主机放在**/etc/apache2/sites-available/,通过a2ensite启用并软链至/etc/apache2/sites-enabled/;支持目录级配置 .htaccess**,便于共享主机与细粒度规则。
- Nginx 配置:主配置**/etc/nginx/nginx.conf**;站点配置同样常用**/etc/nginx/sites-available/与/etc/nginx/sites-enabled/;可用nginx -t语法检查,变更后reload**即可生效,运维体验轻量简洁。
四、典型场景与选型建议
- 适合选择Nginx的场景:
- 高并发/低资源的静态资源服务与反向代理/负载均衡;
- 微服务 API 网关、边缘节点、单页应用(SPA)路由与流量治理。
- 适合选择Apache2的场景:
- 依赖** .htaccess与目录级规则的共享主机**或传统托管;
- 需要mod_rewrite等复杂重定向、mod_security等成熟安全模块;
- 维护传统 LAMP/老旧 PHP 应用或特定模块(如mod_perl)。
- 混合架构:Nginx 前置(静态与反向代理)+ Apache 应用层(动态业务)常能取得更优的吞吐与稳定性平衡。
五、快速上手与最小配置示例
- 安装与启停(Ubuntu):
- Apache2:
sudo apt update && sudo apt install apache2,状态查看systemctl status apache2;
- Nginx:
sudo apt install nginx,状态查看systemctl status nginx。
- 最小虚拟主机示例:
- Apache2(/etc/apache2/sites-available/example.conf):
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
启用:sudo a2ensite example.conf && sudo systemctl reload apache2。
- Nginx(/etc/nginx/sites-available/example):
server {
listen 80;
server_name example.com;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
启用:sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/ && sudo nginx -t && sudo systemctl reload nginx。
- 提示:生产环境请配置HTTPS/TLS、限制请求方法、开启压缩与缓存,并按需设置PHP-FPM(Nginx)或选择MPM(Apache2)。