Nginx 和 Apache 都是搭建 web 服务的工具,但是在性能方面 Nginx 要比 Apache 高,原因如下:
架构设计不同
| Nginx | Apache(httpd) | |
| 并发模型 | 事件驱动 | 多线程 / 多进程(MPM) |
| 资源占用 | 内存消耗低,单进程支持高并发 | 每个连接占用独立线程 / 进程,消耗大 |
| 适用场景 | 高并发、静态内容、反向代理 | 动态内容(PHP 等)、模块化扩展 |
反向代理于负载均衡优势
- Nginx:天生为反向代理设计,支持高性能的 Upstream 负载均衡
- Apache:也可以做代理,配置复杂,性能不如 Nginx
静态文件处理效率
- Nginx:直接通过 sendfile 系统发送文件,减少内核态与用户态的数据拷贝
- Apache:默认适用传统文件读取方式,效率低
内存管理更高效
- Nginx:使用固定内存池分配资源,减少频繁内存申请 / 释放的开销
- Apache:进程模型导致内存碎片化问题严重
例如以菜鸟驿站为例:以前(Apache)到菜鸟有专门的人帮你在驿站内找快递,现在(Nginx)通过 3 -2-658 号码可以快速的在第三个货架第二行上快速查找。
Nginx 和 Apache 不能说哪个好,主要是设计方向不同,Nginx 多用于 web 的静态服务,Apache 多用于服务端的服务
反向代理作用
- 节省公网 ip:域名解析到反向代理服务器上,代理到本地的服务器就不需要额外 IP 了
- 提高安全性:减少反向代理服务器的直接攻击,还可以在代理服务器上提供一些安全策略,防止恶意流量和攻击
- 统一访问入口:一个 nginx 可以代理多个后端服务器
- 提高访问速度:可以将静态内容(图片、js、css)缓存到本地
防盗链
通过阻止非法资源盗用,能为你节省带宽和服务器资源。
location /{
root html;
index index.html index.htm;
}
location ~*\.(gif|jpgljpeglpng|bmp|swf|flv|mp4|webp|ico)${
# maquge.com *.maquge.com; 定义自己的域名白名单,将白名单外的拦截
valid_referers blocked maquge.com *.maquge.com;
if($invalid_referer){return 403;}
}
正文完