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. 使用 abwrk 对 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 更便于集成。