
Apache 在Web服务器市场中统治超过30年。Nginx 专为解决Apache无法很好处理的问题而开发——如今在全球部署数量上Nginx已超过Apache。但这不意味着Nginx在所有情况下都更好。
本文直接对比 Nginx 和 Apache —— 涵盖架构、性能、PHP处理、.htaccess、虚拟主机和各自优势的使用场景。
快速答案: 选择 Nginx 用于需要高性能、静态文件、反向代理或Node.js/Python应用的VPS部署。选择 Apache 当您需要.htaccess按目录配置(共享主机标准)、mod_rewrite,或当您无法控制服务器Web服务器选择时。
Apache是什么?
Apache HTTP Server 于1995年从NCSA HTTPd推出,现由Apache软件基金会维护。它使用 基于进程或基于线程的(MPM)架构 —— 每个请求产生自己的进程或线程,这使隔离变得容易但随着并发连接数增加会消耗大量RAM。
Apache持久的优势是 .htaccess —— 开发人员(不仅是管理员)可以修改的按目录配置。这使Apache成为几乎所有共享主机提供商的标准。
Nginx是什么?
Nginx(发音"engine-x")由Igor Sysoev在2004年创建来解决C10K问题(同时服务10,000个并发连接)。它使用 事件驱动、非阻塞、异步架构 —— 单个worker进程通过事件循环同时处理数千个请求。
如今Nginx最常见的用途是作为应用服务器(Node.js、Python、PHP-FPM)前面的 反向代理,而不是独立的Web服务器,是大多数Ubuntu VPS教程中的默认Web服务器。
功能对比表
| 功能 | Nginx | Apache |
|---|---|---|
| 架构 | 事件驱动、异步、非阻塞 | 基于进程/线程(MPM) |
| 并发连接 | 非常高(事件循环) | 高流量下较低 |
| RAM使用(空闲) | 非常低(~3–5 MB/worker) | 较高(~10–30 MB/进程) |
| 静态文件服务 | 明显更快 | 较慢 |
| PHP支持 | 通过PHP-FPM(需要配置) | mod_php或PHP-FPM |
| .htaccess支持 | ❌ 不支持 | ✅ 按目录支持 |
| 配置风格 | 块级(nginx.conf) | 指令级(.htaccess/httpd.conf) |
| 反向代理 | ✅ 优秀 | ✅ mod_proxy(较慢) |
| SSL/TLS终止 | ✅ 快速 | ✅ mod_ssl |
| WebSocket | ✅ 原生 | ✅ mod_proxy_wstunnel |
| 负载均衡 | ✅ 内置 | ✅ mod_proxy_balancer |
| 共享主机 | ❌ 很少可用 | ✅ 共享主机标准 |
| 配置重载 | 零停机时间(信号) | 优雅重启 |
5个关键实际差异
1. 架构 —— 所有差异的根源
Apache为每个连接创建新的进程或线程(Prefork/Worker/Event MPM),这使隔离变得容易但在高并发下会导致RAM和CPU波动。Nginx在单个进程中使用事件循环 —— worker处理I/O事件而无需阻塞,以恒定的RAM使用量服务10,000+连接。
在1GB RAM VPS上的正常流量下这种差异可能不明显。但在流量尖峰期或与慢客户端(长连接)一起时,Nginx不会OOM而Apache可能停止接受新连接。
2. .htaccess —— Nginx最大的限制
Apache在每个请求时读取每个目录中的 .htaccess 文件,让开发人员无需接触服务器配置就能设置重定向、身份验证和重写。这就是为什么WordPress、CodeIgniter和几乎每个PHP框架都生成 .htaccess 文件。
Nginx没有.htaccess概念 —— 所有配置都在 /etc/nginx/sites-available/ 中需要sudo访问。这使Nginx不适合共享主机,其中每个用户必须管理自己的配置。
⚠️ Nginx上的WordPress: WordPress依赖mod_rewrite通过.htaccess实现漂亮链接。在Nginx上您必须手动将配置添加到server块: try_files $uri $uri/ /index.php?$args; —— 没有插件可以自动处理这个,所以每个新安装在Nginx上的WordPress都需要这个手动步骤。
3. 静态文件性能
Nginx由于事件驱动的I/O和sendfile()系统调用而比Apache快得多地服务静态文件(HTML、CSS、JS、图像)。在真实基准中,Nginx在高并发下比Apache快2-5倍。然而,在前面有缓存层(Varnish、Redis、CDN)的情况下,这种差异在实践中变得微乎其微。
4. PHP —— 两者现在都使用PHP-FPM
现代Apache使用PHP-FPM而不是mod_php,就像Nginx一样 —— 所以PHP性能差异最小。Apache仍然可以使用mod_php(进程内)更容易配置,但不推荐因为PHP崩溃可能导致Apache崩溃。
5. Node.js/Python/Go的反向代理
运行应用服务器如Node.js(Express、Next.js)或Python(Gunicorn、FastAPI)时,Nginx是最好的反向代理 —— 更简洁的配置、更好的请求体缓冲、上游健康检查和内置轮询/最少连接负载均衡。Apache可以用mod_proxy做这个但配置更冗长,高流量下性能较低。
6个维度的深度对比
超越上面的功能表,这个表深入探讨了真正驱动VPS实际决策的维度 —— 流量模式、扩展行为和日常维护工作。
| 维度 | Nginx (事件驱动) | Apache (进程/线程) |
|---|---|---|
| 处理模型 | 一个worker通过事件循环处理数千个连接(epoll/kqueue) | 每个连接一个进程或线程(Prefork/Worker/Event MPM) |
| 静态文件(HTML/CSS/JS/图像) | 更快 —— 使用 sendfile() 直接从内核推送文件 | 稍慢 —— 更多模块层开销 |
| 动态内容(PHP/Python) | 总是代理到PHP-FPM/上游;从不运行应用本身 | 可以通过mod_php在进程内运行或代理到PHP-FPM |
| 按目录配置(.htaccess) | 无 —— 配置集中在server块 | 是 —— 可以按目录编辑而无需重载服务器 |
| 负载/慢客户端下的行为 | 恒定RAM,即使长连接也不会OOM | RAM随连接数扩展,有OOM风险 |
| 模块系统 | 大多编译进去(自1.9.11起支持动态模块) | 运行时加载/卸载模块(a2enmod) |
何时选择Nginx
Nginx适合以高吞吐量、处理大量连接和充当系统边界为中心的工作负载。这些是Nginx明确选择的场景:
- 高流量网站频繁尖峰 —— 事件循环吸收许多并发连接而无需按比例扩展RAM。
- 提供静态文件/CDN源 —— 更快地交付图像、视频和资源,占用空间更小。
- Node.js/Python/Go前面的反向代理 —— 简洁、可读的配置加内置负载均衡和上游健康检查。
- SSL/TLS终止 + HTTP/2/HTTP/3 —— 更平顺地处理大量握手。
- 小RAM VPS(1–2 GB) —— worker每个只用几MB,为数据库和应用留下更多RAM。
A minimal server block proxying to an app on port 3000:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
何时选择Apache
Apache仍然是正确的 —— 有时更简单的选择,特别是当您的工作负载依赖.htaccess或围绕Apache构建的生态系统。
- 共享主机 —— 几乎所有共享主机都运行Apache因为.htaccess让每个用户无需root访问就能配置自己的网站。
- 严重依赖.htaccess的网站 —— 重定向规则、基本身份验证和框架自动生成的mod_rewrite。
- 快速WordPress/PHP框架安装 —— 漂亮链接从.htaccess立即生效,不需要额外配置。
- 需要运行时模块加载 —— 使用
a2enmod/a2dismod启用/禁用模块并立即重载。 - 已经熟悉Apache的团队 —— 按目录指令配置对不是系统管理员的开发人员来说很直观。
An Apache VirtualHost using PHP-FPM via proxy:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example/public
<Directory /var/www/example/public>
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
一起使用两者(Nginx反向代理 + Apache后端)
一个流行的VPS设置既想要Nginx的速度又想要.htaccess的便利,将 Nginx放在前面(端口80/443) 服务静态文件和处理SSL终止,然后转发PHP/动态请求到 后端监听端口8080的Apache。
好处是:您获得Nginx的静态性能和连接处理而您的PHP应用保持使用其现有的.htaccess无需将每个规则改写成nginx配置。一个代理到Apache的Nginx配置示例:
server {
listen 80;
server_name example.com;
root /var/www/example/public;
# Nginx serves static directly
location ~* \.(jpg|jpeg|png|gif|css|js|webp|svg)$ {
expires 30d;
try_files $uri =404;
}
# everything else goes to Apache (port 8080)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
注意:Apache必须从 X-Forwarded-For 头读取真实客户端IP(通过 mod_remoteip),否则其日志只显示 127.0.0.1。对于流量适中的个人VPS,这种两层设置可能太复杂 —— 选择一个并掌握它通常更容易维护。
决策指南 —— 按使用场景选择
- 共享主机: Apache(别无选择 —— 主机提供商使用Apache)
- 运行WordPress的VPS: Nginx + PHP-FPM(需要try_files配置)或Apache(用.htaccess更容易)
- 运行Node.js/Python/Go应用的VPS: Nginx作为反向代理 —— 明确赢家
- 高流量静态网站/CDN源: Nginx
- 使用大量.htaccess规则的网站(重定向、基本认证): Apache简单得多
- VPS初学者: Nginx —— 大多数现代教程使用它
- 零停机配置重载: 两者都支持;Nginx用
nginx -s reload更简单
一起使用两者(Nginx + Apache)
某些高级设置和主机面板(如LiteSpeed)运行 Nginx作为前端反向代理 + Apache在后端处理PHP(端口8080) —— 获得两个世界的最佳效果:Nginx快速处理静态文件和连接,Apache为PHP应用提供.htaccess。对于个人VPS使用这样做过于复杂 —— 选一个并精通它。
常见问题
Nginx真的比Apache更快吗?
对于提供静态文件和高并发感谢其事件循环和 sendfile() 更快。但对于动态内容(PHP),两者都使用PHP-FPM,差异可忽略 —— 前面有缓存层(CDN/Varnish/Redis)时,实际上差异更小。
Nginx可以使用.htaccess吗?
不能。Nginx没有像.htaccess那样的按目录配置概念。一切都必须在 /etc/nginx/ 下的server块中,这需要root访问和编辑后的 nginx -s reload。如果您的网站严重依赖.htaccess,迁移到Nginx意味着自己转换每个重写规则。
WordPress应该使用Nginx还是Apache?
两者都可以。Apache更简单因为漂亮链接从WordPress生成的.htaccess立即生效。Nginx在高流量下更快但您必须自己将 try_files $uri $uri/ /index.php?$args; 添加到server块。对于高流量网站,推荐Nginx + PHP-FPM。
我可以同时在一台机器上运行Nginx和Apache吗?
可以,这是一个流行的模式:Nginx在前面监听端口80/443提供静态和处理SSL,而Apache在后端监听端口8080通过现有.htaccess运行PHP。它们必须监听不同的端口,Apache应该设置 mod_remoteip 来读取真实客户端IP。
准备在VPS上安装Nginx或Apache吗?
AsiaGB VPS 起价 ฿500/月 —— Ubuntu 22.04 LTS、SSD、完全root访问。在几分钟内安装您喜欢的Web服务器。
查看所有VPS方案