专栏首页浪子编程走四方Nginx与 Apache 的对比,优缺点分析,

Nginx与 Apache 的对比,优缺点分析,

NGINX介绍

Nginx是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上NGINX的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

NGINX 优缺点分析

优点分析

1.高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应。

2.内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所以它是轻量级的(至于区别在哪?后面内容进行分析)。

3.简单稳定:一般在使用 Nginx 中,针对单个域名配置文件配置接口,学习成本很低。相比 Apache 配置简单很多。

4.模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。

5.支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。

6.低成本:Nginx可以做负载均衡,且Nginx是开源免费的,如果使用商业软件F5等硬件来做负载均衡,硬件成本比较高。

7.支持多系统:Nginx是由C语言开发,适用于各个平台。

缺点分析

1.动态处理能力较差:Nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋。这一点怎么来说呢?个人觉得这一点不算是 Nginx 的弱点,但是从理论分析,好像有那么回事一样。

2.rewrite弱:虽然Nginx支持rewrite功能,但是相比于Apache来说,Apache比Nginx 的rewrite 强大。Apache 配置 rewrite 是通过项目下面的.htaccess 文件做配置还有就是打开 Apache 配置中的 rewrite 模块。而 Nginx 则需要在做域名配置时,对 rewrite 做配置。

// Apache 需要将该注释给去掉
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
// Nginx 配置 ThinkPHP
 location / {
      if (!-e $request_filename) {
          rewrite  ^(.*)$  /index.php?s=/$1  last;
          break;
      }
}

Nginx动态处理能力分析

1.Nginx 工作原理分析

经常在网上会看到一些文章,提及到 Nginx 的动态处理能力差,暂且咱们不说这是不是正确的一个观点,我们先看看 Nginx 在执行过程中的一个流程。(文章都以 PHP 的配置作为示例配置。)

这里说明一下 FastCGI 和 CGI 是什么?参考链接:http://mindoc.qqdeveloper.com/docs/php/php-1ch9talu8n9ms

配置 FastCGI
location ~ \.php$ {
      # 根据你 PHP 启动的方式决定是 socket 还是 tcp 方式
      #  fasrcgi_pass /usr/tmp/php-fpm.sock;
      fastcgi_pass   php73:9000;
      include        fastcgi-php.conf;
      include        fastcgi_params;
}

2.Apache 如何与 PHP 通行的?

通过上面的参考链接,我们可以知道Nginx 要与 PHP 相关的东西通信是通过 FastCGI 这种协议进行通信,然后 php-fpm 进程管理器接收到信息之后,在提交给 php-fpm 下的 work 进程进行执行。然后 Apache 是直接将 PHP 作为一个模块加载到自身配置中,这样处理的速度更快。

开启 PHP 模块支持
LoadModule php7_module libexec/apache2/libphp7.so

3.总结

通过上面的分析,从理论上说 Apache 确实较好一些。其实无论是mod_php、还是FastCGI,都有其自己的优势。以前在FastCGI技术还不成熟的时候,自然是mod_php稳定、处理速度更快一些,可是社会是不断在向前进步的,现如今FastCGI技术已经非常成熟了,网上也有很多人做了相关的测试,说是FastCGI比mod_php更稳定、速度更快。我个人认为,如果是单机部署的话,可考虑使用mod_php方式,因为毕竟多启一个进程对系统而言就多了一些资源消耗;如果分开部署的话,可考虑使用FastCGI,现在越来越多的人使用nginx+php架构了。

功能对比

一提及到 Nginx,可能都会想到这几个词,反向代理、负债均衡、高性能的 web 服务器。今天简单看了一下 Apache 其实也是支持反向代理功能的。具体没配置过,看着倒是没 Nginx 的简单。

#LoadModule proxy_module libexec/apache2/mod_proxy.so
#LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
#LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
#LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
#LoadModule proxy_fcgi_module libexec/apache2/mod_proxy_fcgi.so
#LoadModule proxy_scgi_module libexec/apache2/mod_proxy_scgi.so
#LoadModule proxy_uwsgi_module libexec/apache2/mod_proxy_uwsgi.so
#LoadModule proxy_fdpass_module libexec/apache2/mod_proxy_fdpass.so
#LoadModule proxy_wstunnel_module libexec/apache2/mod_proxy_wstunnel.so

文章推荐

  1. 深度剖析 Nginx 快的原理。
  2. Nginx与php-fpm之间的通信机制
  3. Nginx如何实现一个域名访问多个项目
  4. 如何通过Nginx配置来优化你的网络请求

本文分享自微信公众号 - 卡二条的技术圈(qq1005349393),作者:浪子编程走四方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP常见的集成环境

    作为新手,需要学习PHP,或者需要搭建PHP+MySQL运行环境时,就需要去找各种搭建方法,一步一步按照操作流程操作,不仅繁琐,而且容易出错,还会带来安全隐患。

    A梦多啦A
  • DevOps工程师到底是做什么的?

    DevOps是当前的最新趋势,但是有很多朋友还是不知道DevOps工程师到底是做什么的?

    A梦多啦A
  • 如何搭建一个属于自己的在线wiki文档系统?

    MinDoc是一个在线的文档管理系统,该系统适用于团队、个人等使用。开发者最初的目的是为了便于公司内部使用,仿照看云开发。有laravel版本以及golang版...

    A梦多啦A
  • C++版 - 剑指offer 面试题32:从1到n整数中1出现的次数(leecode233. Number of Digit One) 题解

    剑指offer 面试题32:从1到n整数中1出现的次数(Leecode233. Number of Digit One)

    Enjoy233
  • %与mod的区别

    %与mod的区别: %出来的数有正有负,符号取决于左操作数。。。而mod只能是(因为a = b * q + r (q > 0 and 0 <= r < q),...

    杨鹏伟
  • 非对称加密技术- RSA算法数学原理分析

    Tiny熊
  • 乘法逆元及其应用

      满足 a * k ≡ 1 (mod p) 的k 叫做 a关于p的乘法逆元。另一种表达方法是 k ≡ a-1 (mod p)

    饶文津
  • HDU 1104 Remainder(BFS 同余定理)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1104 在做这道题目一定要对同余定理有足够的了解,所以对这道...

    ShenduCC
  • dubbo(x)分布式事务解决方案

    会员完成注册后,需要为会员发放奖励(派发一张优惠券),会员相关服务在mod-member模块,优惠券相关服务在mod-card模块,所以说传统的实现方案(在co...

    叔牙
  • 迪菲-赫尔曼密钥交换

    迪菲-赫尔曼密钥交换(英语:Diffie-Hellman key exchange,缩写为D-H) 迪菲-赫尔曼密钥交换是在美国密码学家惠特菲尔德.迪菲和马丁....

    三丰SanFeng

扫码关注云+社区

领取腾讯云代金券