温馨提示×

Ubuntu Apache与Nginx比较

小樊
37
2025-12-24 21:47:15
栏目: 智能运维

Ubuntu 下 Apache 与 Nginx 对比与选型

一 核心差异与性能

  • 架构模型:Apache HTTP Server 采用多进程/多线程的 MPM(如 prefork/worker/event),连接与进程/线程耦合,属于同步阻塞 I/O;Nginx 采用事件驱动的异步非阻塞 I/O,少量工作进程即可处理大量并发连接。
  • 并发与内存:在相同硬件下,Nginx 处理高并发时通常具备更高吞吐与更低内存占用;Apache 的每个连接通常需要更多内存(常见为 2–8MB 级别),而 Nginx 对连接的内存开销通常在 KB 级。
  • 静态内容:Nginx 对静态资源(图片、CSS、JS)吞吐通常更高,实测场景下可达 Apache 的约 2–5 倍;在真实云环境基准中,Nginx 静态场景可达约 32,000 RPS,而 Apache 在约 8,000 RPS 附近出现明显延迟上升。
  • 动态内容:Apache 可通过模块(如 mod_php)在进程内直接执行动态脚本,减少进程间通信;Nginx 通常作为反向代理,将动态请求转发给 PHP‑FPM 或其他应用服务器,带来隔离与灵活性,但增加一次网络跳转。
  • 配置与模块:Apache 支持 .htaccess 分布式配置与动态加载模块,灵活但有一定性能代价;Nginx 配置集中、性能开销更低,模块多为编译期集成。
  • 典型结论:高并发、长连接、静态资源为主或作为反向代理/负载均衡时,Nginx 更优;需要 .htaccess、复杂重写/目录级控制、传统 LAMP/模块生态时,Apache 更合适。

二 典型场景与选型建议

  • 高并发静态站点或 CDN 边缘节点:优先 Nginx(事件驱动、低内存、高压缩与传输效率)。
  • 反向代理、负载均衡、API 网关、微服务入口:优先 Nginx(连接治理、路由、熔断与限流更便捷)。
  • 共享主机、目录级权限与复杂重写规则:优先 Apache.htaccessmod_rewrite 生态成熟)。
  • 传统 LAMP/老旧 PHP 应用、依赖特定 Apache 模块(如 mod_perl 等):优先 Apache
  • 混合架构:前端 Nginx(静态资源与 TLS 终结、负载均衡)+ 后端 Apache(动态应用与复杂模块),兼顾性能与兼容性。

三 Ubuntu 快速上手与最小配置

  • 安装与启用
    • Nginx:sudo apt update && sudo apt install -y nginx && sudo systemctl enable --now nginx
    • Apache:sudo apt update && sudo apt install -y apache2 && sudo systemctl enable --now apache2
    • 防火墙:sudo ufw allow ‘Nginx Full’ 或 sudo ufw allow ‘Apache Full’
  • 最小 Nginx 配置(/etc/nginx/sites-available/default)
    • 示例要点:listen 80; root /var/www/html; index index.html; location / { try_files $uri $uri/ =404; }
  • 最小 Apache 配置(/etc/apache2/sites-available/000-default.conf)
    • 示例要点:<VirtualHost *:80> DocumentRoot /var/www/html; ErrorLog ${APACHE_LOG_DIR}/error.log; CustomLog ${APACHE_LOG_DIR}/access.log combined;
  • PHP 运行方式
    • Apache:sudo apt install php libapache2-mod-php(模块方式,动态内容直出)。
    • Nginx:sudo apt install php-fpm 并在 server 块中通过 FastCGI 转发(如 fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;)。

四 安全与性能优化要点

  • 通用
    • 隐藏版本信息:Nginx 设置 server_tokens off;;Apache 设置 ServerTokens ProdServerSignature Off
    • 安全响应头:如 X-Frame-Options SAMEORIGINX-Content-Type-Options nosniffX-XSS-Protection “1; mode=block”
    • 限制请求体大小:如 client_max_body_size 10M;
    • 启用压缩:Nginx 开启 gzip;Apache 启用 mod_deflate
  • Nginx
    • 进程与连接:worker_processes auto; events { worker_connections 4096; multi_accept on; use epoll; }
    • 传输与缓存:sendfile on; tcp_nopush on; open_file_cache 提升频繁访问文件元数据命中。
  • Apache
    • MPM 选择与调优:prefork(稳定、每个进程单连接)或 event(更高并发);按需设置 StartServers/MinSpareServers/MaxSpareServers/MaxRequestWorkers
    • 避免滥用 .htaccess:在性能敏感场景建议关闭目录级配置,改在主配置中集中管理。
  • 内核与网络(高并发前提)
    • 调大连接与缓冲:如 net.core.somaxconn、net.ipv4.tcp_max_syn_backlog、net.core.rmem_max/wmem_max、tcp_rmem/wmem;开启 net.ipv4.ip_forward(做反向代理时)。

五 何时两者结合使用

  • 前端用 Nginx:处理静态资源、TLS 终结、压缩、限流、熔断、缓存与负载均衡。
  • 后端用 Apache:承载动态应用(PHP/Python 等)、利用 .htaccess 与丰富模块生态、保持既有应用兼容性与灵活性。
  • 这种组合在生产中常见,可同时获得 Nginx 的高并发与资源效率,以及 Apache 的动态处理与配置灵活性。

0