V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
cc959798
V2EX  ›  NGINX

请问 nginx 比 apache 性能高为什么 apache 现在依然流行?

  •  
  •   cc959798 · 2016-06-08 09:51:04 +08:00 · 19737 次点击
    这是一个创建于 3122 天前的主题,其中的信息可能已经有所发展或是发生改变。
    89 条回复    2019-12-24 06:07:43 +08:00
    herozhang
        1
    herozhang  
       2016-06-08 09:55:34 +08:00
    因为大多数网站没啥流量压力
    7654
        2
    7654  
       2016-06-08 09:58:02 +08:00
    一般动态请求要 apache 去做, nginx 静态和反代
    分工不同,没有孰优孰劣
    clino
        3
    clino  
       2016-06-08 09:59:16 +08:00
    apache 可以直接当应用服务器,nginx 可不行,所以有时候 apache 比较方便
    另外在直接静态文件 serve 的时候,nginx 的 index 页面对于长文件显示不全,而且这个貌似没法解决,所以有时候我们会因为这个去用 apache
    xuwenmang
        4
    xuwenmang  
       2016-06-08 10:00:59 +08:00
    百度: nginx vs apache

    你希望我复制几条
    BOYPT
        5
    BOYPT  
       2016-06-08 10:07:00 +08:00
    nginx vs apache 功能和角色上都不在同一个级别,没可比性。
    倒是 nginx vs lighthttpd 后者基本没什么优势但是还是有一定用户群。
    kungfuchicken
        6
    kungfuchicken  
       2016-06-08 10:14:14 +08:00
    因为大多数网站对性能没有那么的敏感, Apache 足够用而且很多功能比 Nginx 还方便
    huobazi
        7
    huobazi  
       2016-06-08 10:15:47 +08:00
    有了 某宝 为啥 还要有 某东
    est
        8
    est  
       2016-06-08 10:16:00 +08:00
    原因是网上各种教程都是基于 10 年前的 apache 的。
    nginx 配置好多也是抄袭得不完整。
    cashew
        9
    cashew  
       2016-06-08 10:20:34 +08:00
    Nginx 在处理静态页面上比 Apache 有优势。
    Nginx 的设计初衷是提供一种快速高效多并发的 web 服务。
    hp3325
        10
    hp3325  
       2016-06-08 10:29:37 +08:00 via Android
    大而全与小而精的区别,具体需要用哪个看需求,就像原来 IIS 也有市场不是。
    tinkerer
        11
    tinkerer  
       2016-06-08 10:31:54 +08:00 via Android
    比如 webdav 服务, apache 上很容易就搞定了
    wujunze
        12
    wujunze  
       2016-06-08 10:34:26 +08:00
    不同业务场景选择不同的 websever 呗 这个没有什么好纠结的
    fcicq
        13
    fcicq  
       2016-06-08 10:49:27 +08:00
    哪怕真的全面碾压了也会有大量的历史遗留. 而碾压本来就不存在, 特别是功能上.
    tigren
        14
    tigren  
       2016-06-08 10:56:27 +08:00   ❤️ 1
    抬头一看发现是 PHP 节点,于是就不好意思发表意见了
    shiny
        15
    shiny  
       2016-06-08 10:56:28 +08:00 via iPhone
    那是实验环境下的性能高,你跑真实生产环境,决定性能的基本都不是 web server
    dangyuluo
        16
    dangyuluo  
       2016-06-08 10:56:52 +08:00 via iPhone
    这是一个多元的世界
    shiny
        17
    shiny  
       2016-06-08 11:02:27 +08:00 via iPhone
    有常识云:离开剂量谈毒性都是耍流氓。
    同样,离开 profiling 谈性能也是耍流氓。
    zaishanfeng
        18
    zaishanfeng  
       2016-06-08 11:10:08 +08:00 via Android
    有了 git 还要 svn 干什么
    zhicheng
        19
    zhicheng  
       2016-06-08 11:18:54 +08:00   ❤️ 6
    为什么有了更好看的 OS X 还有人用 W indows 。
    为什么有了更开放的 Linux 还有人用 OS X 。
    为什么有了垃圾回收的 Java 还有人用 C++ 。
    为什么有了性能更好的 Golang 还有人用 Java 。

    为什么有了 Pepsi 还有人喝 Coca Cola 。
    为什么有了 Nike 还有人穿 Adidas 。

    为什么有了猫咪还有人养狗狗 。

    不能再举例了。

    你想用 nginx 就去用,不用找一万个理由来说服自己。多研究些问题,少谈些主义。
    slixurd
        20
    slixurd  
       2016-06-08 11:20:18 +08:00
    “为什么有了 Pepsi 还有人喝 Coca Cola 。 ”
    因为现在 Pepsi 越来越甜了,甜的无法忍了....
    ila
        21
    ila  
       2016-06-08 11:23:58 +08:00 via Android
    @shiny └(^O^)┘红红火火恍恍惚惚
    vic2012
        22
    vic2012  
       2016-06-08 11:32:43 +08:00 via iPhone
    为什么我觉得新的 apache 比 nginx 配置起来顺手的多……
    a2ensite a2enmod 逻辑及其清晰 配置文件也非常清晰
    ericls
        23
    ericls  
       2016-06-08 11:36:36 +08:00 via iPhone
    我不知道为什么有人说 nginx 可以跑 PHP
    ericls
        24
    ericls  
       2016-06-08 11:37:30 +08:00 via iPhone
    @zhicheng 因为 Pepsi 垃圾
    Jaylee
        25
    Jaylee  
       2016-06-08 11:40:30 +08:00
    @clino 长文件显示不全? 感觉你在搞笑
    holyghost
        26
    holyghost  
       2016-06-08 11:40:47 +08:00
    @zhicheng 百事根本不配在可乐界混。
    cc7756789
        27
    cc7756789  
       2016-06-08 11:41:52 +08:00
    nginx 是处理静态内容的
    jugelizi
        28
    jugelizi  
       2016-06-08 11:44:10 +08:00
    @tigren 哈哈 php 和 python 节点下的提问简直惨不忍睹
    现在的“程序员”都不会搜索了
    cc959798
        29
    cc959798  
    OP
       2016-06-08 13:00:27 +08:00
    @zhicheng 我没谈什么主义啊,感觉在 PHP 节点下提问题好奇怪啊,大多都带着火药味,不感兴趣的话完全可以不回答啊
    cc959798
        30
    cc959798  
    OP
       2016-06-08 13:01:27 +08:00
    @jugelizi 我也感觉 PHP 节点很怪,要不是嘲讽要不是喷,没几个正经的
    Andy1999
        31
    Andy1999  
       2016-06-08 13:09:31 +08:00 via iPhone
    @ericls 不可以 用的是 unixsocks 传递给 php-fpm 处理 然后把数据拿过来展现
    fengyqf
        32
    fengyqf  
       2016-06-08 13:10:30 +08:00
    节点被玩坏了。。。。
    话说回来, apache httpd 的功能那一个全面啊,几乎可以干任何事情!而 nginx ,除了速度快效率高之外,就真没什么了,当然正是这一点,让他有了目前的地位。
    mengzhuo
        33
    mengzhuo  
       2016-06-08 13:23:24 +08:00 via iPhone
    说 nginx 动态不行的用过 lua 么
    msg7086
        34
    msg7086  
       2016-06-08 13:24:59 +08:00
    @vic2012 不妨试试新的 nginx 配置环境?

    @fengyqf OpenResty 也是可以一战的。
    clino
        35
    clino  
       2016-06-08 13:45:37 +08:00 via Android
    @Jaylee 难道不是吗? 我也想别人证明这是搞笑啊
    ericls
        36
    ericls  
       2016-06-08 13:47:36 +08:00 via iPhone
    @Andy1999 我也是这么想的
    jokie
        37
    jokie  
       2016-06-08 13:48:11 +08:00
    因为懒
    zkaip
        38
    zkaip  
       2016-06-08 14:09:00 +08:00
    Apache 大而全, nginx 小而快, 不谈场景谈应用都是扯淡...
    zhicheng
        39
    zhicheng  
       2016-06-08 14:25:34 +08:00
    @cc959798 你闻到火药味是因为你的问题根本就是带有偏见的,你只是想找到同意你观点的人,而不是寻找问题的答案。
    richzhu
        40
    richzhu  
       2016-06-08 14:27:06 +08:00
    多研究些问题,少谈些主义。
    fcicq
        41
    fcicq  
       2016-06-08 14:27:35 +08:00
    @msg7086 你会给旧应用做移植吗? 移植后的好处很多能赚回开发成本吗? 事实是成品有了就懒得再动手了.
    msg7086
        42
    msg7086  
       2016-06-08 14:33:00 +08:00 via Android
    @fcicq 然而和我说的并没有关系。
    我说的是功能,你说得是资历。
    ccming
        43
    ccming  
       2016-06-08 14:43:47 +08:00
    试着去 stackoverflow 问一下这种问题
    fcicq
        44
    fcicq  
       2016-06-08 14:44:14 +08:00
    @msg7086 资历很重要啊, 有多少不好的东西因为沉没成本早就投下去了, 所以根本换不掉, apache 还没有差到那个地步.

    这里的经济帐不能单纯从技术上算. 经验中, 新系统的设计和实现(或者是成本等重要的因素)必须比旧的好 10 倍以上, 才能用一种有损兼容性的方法去更新. 如果旧系统有若干种能够维持兼容性的提升方法肯定会优先采用, 比如硬件升级, 虚拟化等等都能给旧系统延命, 延命后的系统也很难找到优秀 10x 以上的替代品.
    cc959798
        45
    cc959798  
    OP
       2016-06-08 15:08:38 +08:00
    @zhicheng 如果我的表达让你感到偏见了,我深表歉意。但是我真的不是我为了找什么认同观点的人(我问题里有观点吗?),如果你觉得我在引战,你完全可以无视我的存在。最近由于工作需要刚开始做 PHP ,对于我无知还请原谅。但请不要带着偏见看待。我对 ve2x 不是熟悉(至少不常上),不知道 PHP 节点为什么会这样,所以请注意你的措辞。
    cc959798
        46
    cc959798  
    OP
       2016-06-08 15:09:09 +08:00
    @ccming 英语水平有限,为什么不能再这问?
    lhbc
        47
    lhbc  
       2016-06-08 15:36:27 +08:00   ❤️ 1
    1. 不是所有公司的运维都懂 nginx, 尤其是中小型企业,或者说,相当一部分公司根本就没专职运维。能照着手册或者文档让 Apache 跑起来已经不容易了
    2. 99%的网站(按数量算), Apache 和 nginx 的性能差距实际影响大约为 0 ,因为 PV 根本就没几个
    3. Windows 下, Apache 比 nginx 好很多
    zhouzhe8013
        48
    zhouzhe8013  
       2016-06-08 15:52:20 +08:00
    够用,简单,在各种老版本的 linux 发布版基本都有 httpd 直接包管理安装,而不像 nginx 需要编译安装.
    breeswish
        49
    breeswish  
       2016-06-08 15:53:25 +08:00
    因为性能和流行程度没关系啊
    cheng007
        50
    cheng007  
       2016-06-08 15:56:20 +08:00
    @clino 你应该学一下 nginx 怎么用了。
    yeyeye
        51
    yeyeye  
       2016-06-08 16:31:25 +08:00
    @lhbc 让我想起了一句话 不是所有运维都懂 Apache 于是 IIS 风生水起
    kn007
        52
    kn007  
       2016-06-08 16:35:01 +08:00 via Android
    因为 apache 配置简单?
    反正我用 nginx
    strahe
        53
    strahe  
       2016-06-08 16:37:10 +08:00
    因为中小站长多,因为中小站长写 php 的也多,
    qhxin
        54
    qhxin  
       2016-06-08 16:40:00 +08:00
    稳。线程安全。
    Jaylee
        55
    Jaylee  
       2016-06-08 16:55:03 +08:00
    @clino 别在网上乱找野鸡教程
    TangMonk
        56
    TangMonk  
       2016-06-08 17:14:44 +08:00 via Android
    不知道可不可以这样类推,真正有价值的东西都被少数人了解或拥有。
    clino
        57
    clino  
       2016-06-08 17:24:17 +08:00
    @cheng007
    @Jaylee
    http://www.rbrussell.com/2014/12/10/nginx-display-full-filename-directory-listing/
    这个问题要改 nginx 代码的,想我从来都是 apt-get 安装的不想去这么折腾
    clino
        58
    clino  
       2016-06-08 17:25:08 +08:00
    Jaylee
        59
    Jaylee  
       2016-06-08 17:29:20 +08:00
    @clino 。。。醉了。。你开心就好
    clino
        60
    clino  
       2016-06-08 17:46:08 +08:00
    @Jaylee 碰到这种问题我为什么要开心呢?
    MikuM97
        61
    MikuM97  
       2016-06-08 17:47:35 +08:00
    总之,有人找我推荐,我的原则就是:先参考你要跑的程序的兼容性。
    其次,对于像我自己博客那种一天几个 pv 的情况,随意选择,喜欢哪个用哪个。
    如果你的站流量较大, nginx 。
    初学者,兼容性 ok 的情况下,还是建议试试 nginx ,毕竟配置比较简单,而且是未来的趋势。
    codespots
        62
    codespots  
       2016-06-08 18:11:51 +08:00
    @shiny 看到星形头像想到是你,点开资料看到网址确认是你,打开网址,怀疑不是你,百度觅茶集,然后对比域名才发现一个 https 一个 http ,你微博好久没更新了
    leeloto
        63
    leeloto  
       2016-06-08 18:53:29 +08:00 via iPhone
    @TangMonk 正好相反,当你觉得是好东西的时候别人早就发现了
    Jerry5850022
        64
    Jerry5850022  
       2016-06-08 19:02:56 +08:00
    你觉得,一个日 PV 不过十的小博客需要用 nginx 吗?

    能照着 Apache 的手册把服务器配好我都觉得我很牛逼了!
    shiny
        65
    shiny  
       2016-06-08 20:23:50 +08:00
    @westooy 原来我都这么高调引起过路人注意了?阿里 ACE 倒闭了,所以 SSL 去掉了。
    BlueFly
        66
    BlueFly  
       2016-06-08 22:32:56 +08:00   ❤️ 1
    好多人说漏一点,其实 Apache 与 Nginx 在实用性方面最大的区别是伪静态(url rewrite)的支持, Apache 在根目录放个.htaccess 就好了,而且这个.htaccess 还都是各个程序自带和标配的,而 nginx 需要修改 .conf 并且还不一定自带,还需要自己从.htaccess 转换格式。
    光这一点上,起码在虚拟主机市场这块, Nginx 就无法占有。
    msg7086
        67
    msg7086  
       2016-06-08 23:13:16 +08:00
    @fcicq 233 所以我根本没说这个啊。
    msg7086
        68
    msg7086  
       2016-06-08 23:14:34 +08:00
    @BlueFly 这不是伪静态支持,而是动态配置文件支持。
    好处是灵活,坏处是需要不停扫描磁盘搜索.htaccess (因为有继承所以目录深的时候会大大影响效率)。
    elonsz
        69
    elonsz  
       2016-06-08 23:16:30 +08:00
    https://ooo.0o0.ooo/2016/06/08/57583899d6e66.jpg
    https://ooo.0o0.ooo/2016/06/08/5758389aa4fbc.jpg
    orFish
        70
    orFish  
       2016-06-08 23:23:07 +08:00
    nginx 处理静态文件有优势
    但是处理 php 并不比 Apache 好
    Perry
        71
    Perry  
       2016-06-08 23:45:05 +08:00
    po 主的 13 个帖子全是问题
    BlueFly
        72
    BlueFly  
       2016-06-08 23:49:31 +08:00
    @msg7086 嗯,说得不好。 不过这个方便性在虚拟主机里,无法替代啊,那个虚拟主机服务商能接受不单要手工加入 .conf 还得每次重启一次 Nginx 的事情,光重启 Nginx 就得让其他用户骂死了。 而虚拟主机份额又不少,就算不用 Apache 也得选择完全兼容 .htaccess 的,绝不会选择 Nginx 的
    Narcissu5
        73
    Narcissu5  
       2016-06-09 00:05:32 +08:00
    楼上有些怕是弄混了 apache httpd 和 apache tomcat , httpd 并没有渲染动态内容的能力
    skydiver
        74
    skydiver  
       2016-06-09 00:06:35 +08:00
    @BlueFly nginx -s reload apache 都能从容重启, nginx 怎么就不能呢
    BlueFly
        75
    BlueFly  
       2016-06-09 00:12:22 +08:00
    @skydiver 为什么你不想想虚拟主机的应用场景? 一台主机就一个用户? 不客气的说,上百个用户的不同网站在跑,某个用户的网站也许正在做交易,你服务器莫名其妙重启一次 Nginx ,这影响怎么算?
    billlee
        76
    billlee  
       2016-06-09 00:58:54 +08:00
    @Narcissu5 apache httpd 可以通过 mod_php 在同一个进程内运行 php 代码.
    xierch
        77
    xierch  
       2016-06-09 01:19:00 +08:00
    SoloCompany
        78
    SoloCompany  
       2016-06-09 01:35:34 +08:00   ❤️ 2
    nginx 定位是 http 协议服务器而不是 web 服务器
    因为架构不允许阻塞,所以开发上层服务会很困难,一般更多是是用做反代 /静态资源服务 /缓存
    nginx 还可以反代 http 以外的协议,比如 smtp / pop3 / imap

    而 apache 则是 http 和 web 服务器的整体,由于允许阻塞,可以直接支持 cgi ,开发上层服务自然是很容易, php 就是个典型

    这两者其实并没有太大的可比性
    julor
        79
    julor  
       2016-06-09 07:46:52 +08:00 via Android
    楼主,别人老婆比你的漂亮,你怎么不去娶别人老婆!合适才是最重要!
    cc959798
        80
    cc959798  
    OP
       2016-06-09 09:34:13 +08:00
    @Perry 不行吗
    elonsz
        81
    elonsz  
       2016-06-09 10:18:18 +08:00
    @xierch
    https://ooo.0o0.ooo/2016/06/08/5758d3c7306f0.jpg
    https://ooo.0o0.ooo/2016/06/08/5758d3c730408.jpg
    ryd994
        82
    ryd994  
       2016-06-09 12:41:05 +08:00
    @BlueFly
    @skydiver
    nginx 确实是可以 reload 的,因为端口由 master 进程监听然后传递给 worker ,所以 reload 的时候是:
    1. 用新配置启动新 worker
    2. 确认新 worker 存活之后停止给旧 worker 派发请求
    3. 等旧 worker 完成所有请求,退出
    这样新旧交接是理论上无缝的

    但是,这并不意味这 nginx 就可以用在虚拟主机里。别的不说,如果有个用户往自己的配置里加点料,谁都 reload 不了。虽然 reload 可以保证新 worker 的活的,但不能保证新 worker 配置合理。 htaccess 的优势就在于就算用户煞笔,不至于影响别人。
    BlueFly
        83
    BlueFly  
       2016-06-09 14:50:50 +08:00
    @ryd994 因为我一直是用 restart 而不是 reload 重置 Nginx ,可能这里理解有出入了。不过我的原意是明确,在虚拟主机市场上, Nginx 从来都不是选项,主机商就算不选用 Apache 也一定会选用能兼容 .htaccess 的。而对于市场份额占有来说,主机商选择与否是非常明显的。 Nginx 无法进入虚拟主机市场,份额可想而知。
    .htaccess 好处就是傻瓜化自动化,.conf 修改需要一定权限,还需要检验,人肉成本也会增加。无法外包给客服公司去做,这对于像美帝这样硬件成本不值钱,人工成本高的国家是非常要命的。
    codespots
        84
    codespots  
       2016-06-16 20:03:19 +08:00
    @shiny 因为看过你写的短网址那篇文章,就关注你的微博和网站了。
    vic2012
        85
    vic2012  
       2016-06-18 19:54:39 +08:00
    @msg7086 新的配置环境是指?
    shanechiu
        86
    shanechiu  
       2017-12-05 08:33:00 +08:00 via Android
    虽然我觉得有些回答很搞笑。这第一个 open topic?总能看到一些人说 Apache 动态处理比 nginx 好,给我个解释或者链接啊!我是个 new fish 啊!这里有很多 new fish 啊。抱歉,抱怨太多。我附上我找到的链接,https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations
    kaohaonan6666
        87
    kaohaonan6666  
       2018-11-21 16:34:15 +08:00
    apache 是先驱者,占领的市场份额是最高的,一些老项目所占比重较大, 但现在最新的高并发高流量项目的 技术选型的趋势一定是 nginx !
    autogen
        88
    autogen  
       2019-12-24 06:00:20 +08:00
    由于 php-fpm 内存泄漏和崩溃的问题,php 还是搭配 apache 更加稳定,而且网上的 php 入门教程也是 apache+php 的多


    java、c++、node、go、python 现在一般都搭配 nginx 了


    -
    autogen
        89
    autogen  
       2019-12-24 06:07:42 +08:00
    不过 V 站有多少人用 nginx + c 语言写的 so 来开发网站?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:49 · PVG 08:49 · LAX 16:49 · JFK 19:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.