7.1.8 Nginx与Web服务器对比与适用场景
本节对比 Nginx 与常见 Web 服务器(Apache、IIS、Lighttpd)在架构模型、性能特征与适用场景上的差异,帮助运维在选型时做出合理判断,并给出可操作的安装、验证、排错与练习示例。
原理草图(请求路径与职责对比):
核心对比要点(简表):
- Nginx:事件驱动、异步非阻塞;高并发、低资源;适合静态资源、反代、负载均衡、API 网关。
- Apache:多进程/多线程、模块丰富;动态内容与历史兼容性强;高并发需更多资源与调优。
- IIS:Windows 生态集成深;适合企业内网、ASP.NET 业务。
最小化安装与验证(以 Ubuntu/Debian 为例):
# 1) 安装
sudo apt update
sudo apt install -y nginx apache2
# 2) 启动并设置开机自启
sudo systemctl enable --now nginx
sudo systemctl enable --now apache2
# 3) 验证端口与服务状态
ss -lntp | egrep '(:80|:443)'
systemctl status nginx --no-pager
systemctl status apache2 --no-pager
Nginx 反向代理示例(体现适用场景:入口层 + 后端应用):
- 目标:将 80 端口流量转发到后端 127.0.0.1:8080
# /etc/nginx/conf.d/proxy.conf
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
应用后端模拟:
# 启动一个临时 HTTP 服务作为后端
python3 -m http.server 8080
加载配置并验证:
sudo nginx -t
sudo systemctl reload nginx
curl -I http://localhost/
Apache 动态内容处理对比示例(mod_php 传统栈):
# 安装 PHP 与 Apache 模块
sudo apt install -y libapache2-mod-php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php
curl -I http://localhost/info.php
IIS 适用场景提示(Windows 环境简要命令):
# Windows Server 安装 IIS
Install-WindowsFeature -Name Web-Server -IncludeManagementTools
# 启动 IIS
Start-Service W3SVC
排错要点与命令(可直接执行):
# 1) 端口占用
sudo lsof -i :80
# 2) Nginx 配置语法检查
sudo nginx -t
# 3) Nginx 关键日志
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
# 4) Apache 关键日志
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/access.log
常见问题定位示例:
- 现象:Nginx 反向代理 502
- 检查后端进程是否存活、端口是否正确:
ss -lntp | grep 8080
curl -I http://127.0.0.1:8080
- 现象:Apache 启动失败
- 端口冲突或配置错误:
sudo apachectl -t
sudo lsof -i :80
练习与实践:
1. 在同一台机器上配置 “Nginx 前端 + Apache 后端”,Nginx 监听 80,Apache 监听 8080。
2. 使用 ab 或 wrk 对 Nginx 和 Apache 分别进行并发测试(10/100/1000 并发),对比响应时间与 CPU/内存占用。
3. 将 Nginx 增加 gzip 与静态缓存头,观察静态资源响应头变化。
性能测试示例:
# 安装 wrk
sudo apt install -y wrk
# 对 Nginx 进行压测
wrk -t4 -c200 -d30s http://127.0.0.1/
# 查看资源占用
top -p $(pgrep -d',' -f 'nginx|apache2')
选型建议落地:
- 高并发与入口层:优先 Nginx(反向代理、负载均衡、静态加速)。
- 传统动态站点(PHP/老系统):Apache 仍具兼容优势。
- Windows/ASP.NET 企业内网:IIS 更便于集成。