V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kn007
V2EX  ›  问与答

究竟是 Apache 还是 Nginx?

  •  1
     
  •   kn007 · 2015-07-05 22:28:38 +08:00 · 7942 次点击
    这是一个创建于 3439 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到类似问题,v2已经有段时间没谈了,不同时间,想法应该不尽相同,开个贴问问。

    目前自用着CentOS 6.6 x64,主要配置了Nginx、MySQL、PHP,次要的有Varnish、Redis、Memcache等杂七杂八的。

    习惯了lnmp,虽说早期也是用着lamp,但现在对A的规则,基本忘却。。。

    我想问问大家在lnmp和lamp中会选择哪者?

    也欢迎补充诸如lnmpa等类型,希望能顺带写上你选择的原因。

    最近有朋友跟我说帅的人早就开始用Apache,还有原先用Nginx的又回到Apache。有点不解。

    个人选择lnmp的原因是,觉得Nginx比较快、处理能力强、占用低、功能性强(反代什么的)。

    68 条回复    2015-07-10 13:34:15 +08:00
    aalska
        1
    aalska  
       2015-07-05 22:53:53 +08:00   ❤️ 2
    帅的人用nginx
    geekzu
        2
    geekzu  
       2015-07-05 22:57:41 +08:00 via Android
    ltampv 2333
    aszxqw
        3
    aszxqw  
       2015-07-05 22:58:26 +08:00
    @aalska 哈哈哈
    kn007
        4
    kn007  
    OP
       2015-07-05 22:58:33 +08:00
    @aalska 哈哈哈哈,好吧。
    其实Apache处理php应该还是快点,不过并发不多,我觉得Nginx足够胜任了
    kn007
        5
    kn007  
    OP
       2015-07-05 23:00:22 +08:00
    @geekzu linux tengine apache mysql(mariadb mongodb) php varnish?
    geeglo
        6
    geeglo  
       2015-07-05 23:00:47 +08:00
    nginx
    zonghua
        7
    zonghua  
       2015-07-05 23:02:34 +08:00 via iPhone
    502 bad gate
    kn007
        8
    kn007  
    OP
       2015-07-05 23:03:54 +08:00
    @zonghua 想说nginx 502?起码在我手上,这种情况只在最近发生过一次(3年多来)
    geekzu
        9
    geekzu  
       2015-07-05 23:05:33 +08:00 via Android
    @kn007
    sumhat
        10
    sumhat  
       2015-07-05 23:05:48 +08:00
    个人博客体现不出两者的差距,Apache 的生态环境要比 Nginx 好一点,在主机不差钱的情况下 Apache 没什么劣势。
    mantouge
        11
    mantouge  
       2015-07-05 23:07:55 +08:00
    颜值高的人用nginx!呵呵
    kn007
        12
    kn007  
    OP
       2015-07-05 23:13:04 +08:00
    @sumhat 或许你可以深入讲一下?
    zonghua
        13
    zonghua  
       2015-07-05 23:20:06 +08:00 via iPhone
    @kn007 反正我看到的502都是nginx
    Hello1995
        14
    Hello1995  
       2015-07-05 23:21:21 +08:00 via Android
    LANMP...
    Felldeadbird
        15
    Felldeadbird  
       2015-07-05 23:41:02 +08:00   ❤️ 1
    没有遇到需求瓶颈的话,apache和nginx完全体验不出区别。只有项目到了访问出问题,性能问题,需求满足不了才知道选apache还是nginx。
    我要减肥,但是还没开始我就觉得要节食很痛苦。那我还是不减肥好了。
    kn007
        16
    kn007  
    OP
       2015-07-05 23:44:10 +08:00
    @Felldeadbird 嗯,有道理
    pubby
        17
    pubby  
       2015-07-05 23:59:13 +08:00
    即使用apache,也建议你前面放一个nginx。要不然,大量网速慢的客户端都能拖死你apache
    sinxccc
        18
    sinxccc  
       2015-07-05 23:59:54 +08:00
    反正我觉得我那些放几张网页放个 blog 的网站用什么都没差…
    kn007
        19
    kn007  
    OP
       2015-07-06 00:06:21 +08:00
    @pubby 也就是lnmpa
    kn007
        20
    kn007  
    OP
       2015-07-06 00:11:33 +08:00
    或许还可以加个问题,现有lnmp,有无必要lnmpa
    RAKE
        21
    RAKE  
       2015-07-06 00:14:23 +08:00
    PHP7就要来了,届时Nginx的fpm性能不会比Apache差(而且现在也还有hhvm)。

    选Apache最大的好处就是灵活,so可以随便载入,而Nginx就必修更新二进制文件。

    好像差距越来越小了。。
    49
        22
    49  
       2015-07-06 00:16:50 +08:00 via Android
    我觉得Apache配置略繁琐。。。
    PS:这下完美了,我在pac里加入了日夜的判断,白天直连HK,夜间CN2中转,
    新的pac只需要把老地址的pac改成auto
    orvice
        23
    orvice  
       2015-07-06 00:31:23 +08:00
    看情况啦,处理php apache会比较强,静态文件nginx比较快。
    apache也比较稳定些,像我们这种小小,用nginx经常502什么的。。。
    LINAICAI
        24
    LINAICAI  
       2015-07-06 00:45:51 +08:00
    反正我看到502 的都是nginx+1
    maskerTUI
        25
    maskerTUI  
       2015-07-06 00:49:59 +08:00
    lanmp也可以呀,尤其是在访问大的时候比较好
    loveminds
        26
    loveminds  
       2015-07-06 00:55:17 +08:00
    自己改的nginx,基于openresty
    nlzy
        27
    nlzy  
       2015-07-06 00:59:08 +08:00 via iPhone
    @zonghua 反正我看过的 Apache 的 50X 直接就爆路径出来了(某几个游戏论坛)

    @RAKE PHP7 已经有 Alpha2 了,我的个人博客已经用上了,性能确实比 PHP5 好很多。想要灵活可以用 tengine 啊
    laogui
        28
    laogui  
       2015-07-06 05:21:19 +08:00 via Android
    用apache十几年了,带有深厚的感情,对于普通的几万ip的网站二者差距不大,nginx处理静态文件有优势,apache 2.4后二者的差距在不断缩小,apache+varnish很好的搭配。
    msg7086
        29
    msg7086  
       2015-07-06 05:46:43 +08:00
    如果你内存特别大的话就用apache,否则慎用。
    我的意思是如果你有4G以上内存的话。如果只有256M那就别尝试了。
    kn007
        30
    kn007  
    OP
       2015-07-06 07:12:41 +08:00
    @RAKE 这是我爱听的。
    @49 哦,好。你不是说你转战apache么,话说你不觉得昨天一直掉线抽风么?
    @orvice 从来没502过。。。
    @LINAICAI 我看到整台服务器瘫痪的,都是APACHE
    @loveminds 章哥的组件很好!
    @nlzy tengine灵活?此话怎讲?求教下。
    @laogui 我目前是nginx+varnish。。。。
    @msg7086 其实我是4G3核的VPS。。。
    kn007
        31
    kn007  
    OP
       2015-07-06 07:17:46 +08:00
    @nlzy 是我没仔细看,灵活是想说可以动态加载模块是吧。
    msg7086
        32
    msg7086  
       2015-07-06 07:30:16 +08:00
    @kn007 那并无所谓了。
    当然如果要考虑到将来的发展的话,nginx是少不了了。
    至于后端的话apache也好fcgi也好应该差不多。
    kn007
        33
    kn007  
    OP
       2015-07-06 07:45:23 +08:00
    @msg7086 如果差不多,那我就还是保持着Nginx with FPM-FCGI。。。
    elvba
        34
    elvba  
       2015-07-06 07:57:48 +08:00
    当使用 PHP 作为 Apache 模块时,也可以用 Apache 的配置文件(例如 httpd.conf)和 .htaccess 文件中的指令来修改 PHP 的配置设定

    举个例子,在线上肯定不能去随便重启 apache,但是碰到了 ini_set 不能设置的选项怎么办?apache 的话就可以用 .htaccess 来配置 php,而且只会对配置的目录生效,不会影响全局
    kn007
        35
    kn007  
    OP
       2015-07-06 08:03:51 +08:00
    @elvba 这个我明白。但是我生产环境没那么复杂。。。
    typcn
        36
    typcn  
       2015-07-06 08:09:14 +08:00
    @LINAICAI 因为 apache 没达到 502 的访问量就已经崩溃了
    cys
        37
    cys  
       2015-07-06 08:09:39 +08:00 via Android
    到底是 lnmp还是 lemp
    kn007
        38
    kn007  
    OP
       2015-07-06 08:11:18 +08:00
    @typcn 我完全同意你的观点。
    nginx只是返回502,而httpd却因为太多100%进程,搞垮了整台服务器,包括处在同台的数据库。
    kn007
        39
    kn007  
    OP
       2015-07-06 08:11:53 +08:00
    @cys 两者一样 nginx 读音就是engine x
    kn007
        40
    kn007  
    OP
       2015-07-06 08:17:13 +08:00
    @syhily 过来发表一下帅的人的意见,为何apache大法好^_^
    soli
        41
    soli  
       2015-07-06 09:50:12 +08:00
    @elvba Nginx 不是可以 reload 么
    maoyipeng
        42
    maoyipeng  
       2015-07-06 10:02:26 +08:00 via iPhone
    apache 不要用默认的mod_php,默认的serverlimit之类的参数也要调整
    bibizhang
        43
    bibizhang  
       2015-07-06 10:12:42 +08:00
    看心情
    aalska
        44
    aalska  
       2015-07-06 10:52:42 +08:00
    @pubby 慢速连接攻击 专门针对apache 2.2.X /某些2.X
    DT27
        45
    DT27  
       2015-07-06 11:02:11 +08:00
    被502伤的太深了,还会死Apache好。
    nlzy
        46
    nlzy  
       2015-07-06 11:11:14 +08:00 via iPhone
    @kn007 没什么求教的,我也不是大牛,我只是知道 tengine 可以动态加载模块
    sarices
        47
    sarices  
       2015-07-06 11:15:36 +08:00
    apache配置好烦,还是nginx清爽
    mongodb
        48
    mongodb  
       2015-07-06 11:19:20 +08:00
    说实话大多数时候讨论这问题就跟上班族讨论如何帮马云选择金融理财资产配置一样。。
    alex321
        49
    alex321  
       2015-07-06 11:24:57 +08:00
    @zonghua nginx 防采集,或者浏览请求在时间段内超标也会返回 502 的。。
    Pseric
        50
    Pseric  
       2015-07-06 11:27:05 +08:00
    Apache 前端挂个 Nginx 做 Proxy 不就好了吗?
    xiaodongus
        51
    xiaodongus  
       2015-07-06 12:05:33 +08:00
    用lanmp最好
    kn007
        52
    kn007  
    OP
       2015-07-06 13:01:57 +08:00
    @soli 是可以,但是apache不用reload~
    @maoyipeng 不懂
    @bibizhang 心情好才是真的好
    @Pseric 就是想说有没有必要嘛
    TrustyWolf
        53
    TrustyWolf  
       2015-07-06 13:05:36 +08:00
    RHEL官方基本都是在用Apache,Nginx需要EPEL源。
    说明两者都是非常好的软件,喜好的话看个人吧。
    咱倒是觉得Nginx的配置文件看起来舒服些。
    kn007
        54
    kn007  
    OP
       2015-07-06 13:07:57 +08:00
    @TrustyWolf 同感Nginx配置文件舒服。
    我基本都是编译的,所以还好。
    stackpop
        55
    stackpop  
       2015-07-06 13:08:39 +08:00
    哪个工具链和文档更完善用哪个,架构得当多大业务都能支撑,到时候牛逼了再动不迟。
    cdffh
        56
    cdffh  
       2015-07-06 13:50:51 +08:00
    我们之前用的apache 现在并发上来了apache扛不住,开始往nginx迁移了.具体的就不再这里赘述了.大家看这个文章吧.
    https://library.oreilly.com/book/0636920022343/high-performance-mysql-3rd-edition/426.xhtml?ref=toc#web_server_issues
    高性能mysql 里面有一章专门讲道这个问题
    kn007
        57
    kn007  
    OP
       2015-07-06 14:42:09 +08:00
    @cdffh 额,好老了这本书
    kn007
        58
    kn007  
    OP
       2015-07-06 16:29:45 +08:00
    看来基本上不是n/t就是a了,不过选n的人还是多
    cst4you
        59
    cst4you  
       2015-07-06 16:53:14 +08:00
    tengine
    tabris17
        60
    tabris17  
       2015-07-06 16:55:58 +08:00
    IO密集用Nginx(如:业务简单的Web网站)

    计算密集用Apache(如:企业内部系统、各种管理系统)
    kn007
        61
    kn007  
    OP
       2015-07-06 18:01:31 +08:00
    @tabris17 请教下,为何呢?
    何为计算和IO密集?。。。
    tabris17
        62
    tabris17  
       2015-07-06 18:09:07 +08:00
    @kn007
    IO密集,就是访问人数比较多的,业务逻辑简单,无非是数据库CRUD;
    计算密集就是同时访问人数相对较少,但是每次请求会有大量业务计算的
    kn007
        63
    kn007  
    OP
       2015-07-06 18:17:18 +08:00
    @tabris17 我总以为计算产生io。。。
    业务计算都有哪些呢?是否能举几个例子,非常感谢。。。
    tabris17
        64
    tabris17  
       2015-07-06 18:26:23 +08:00
    @kn007 就是消耗CPU的业务,比如每次请求都要计算pi的100w位
    kn007
        65
    kn007  
    OP
       2015-07-06 18:48:56 +08:00
    @tabris17 擦。。。原来如此
    话说Apache处理这种计算密集的业务的优势在哪里?
    我现在也有个消耗CPU的业务页面,主要是一次性要读取10M大小的数据出来(从redis or mysql),然后排列分析
    tabris17
        66
    tabris17  
       2015-07-06 19:09:45 +08:00
    @kn007 补充一下,所谓计算密集是指运行在Apache进程内的模块,fastcgi这种进程间交互的不算
    kn007
        67
    kn007  
    OP
       2015-07-06 19:10:48 +08:00
    @tabris17 哦,其实还是不甚了解,嘿嘿
    Solerer
        68
    Solerer  
       2015-07-10 13:34:15 +08:00 via Android
    Nginx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3320 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:13 · PVG 20:13 · LAX 04:13 · JFK 07:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.