Web服务器平台的配置——Nginx和Apache

装好Linux的下一步,就是搭建WEB服务器的平台。简单的方法就是用一键安装包,也建议这么做,因为少折腾很多。

如果你的是 Windows 的主机,可以搭建  IIS+PHP+MYSQL  或者 Apache+PHP+MYSQL 。

Linux 的话,按时间发展顺序出现了LAMP, LNMP 和LNAMP三种不同的搭配。L是指Linux,A指Apache,N指Nginx,M是指Mysql,P是指PHP。

关于 NGINX 与 APACHE 的区别,随便搜搜就有一堆资料。Nginx性能比Apache优越已是不议的事实,之所以还会出现LNAMP是因为有人说 “LNMP下php(fastcgi)不够稳定,经常出现502错误,生成相对复杂的页面没有优势,反而会使php-cgi进程变为僵尸进程。安全性,多用户多站点权限问题.php(fastcgi)在应对多用户多站点往往捉襟见肘,不易于实施。”

有一个事实大家需要知道的,采用Nginx+php-cgi组合比Apache+php要占内存,因为NGINX要保持网站不挂的情况下,PHP的工作方式不一样,与性能无关。看了大量资料,整合一下,应该是这么解释的:

首先,Nginx 并不支持 cgi 方式运行,原因是可以减少因此带来的一些程序上的漏洞。所以必须使用 FastCGI 方式来执行PHP程序。

FastCGI 进程管理器自身初始化,启动多个 CGI 解释器进程并等待来自Web Server的连接,内存高在此处。当客户端请求到达 Web Server 时,FastCGI 进程管理器选择并连接到一个 CGI 解释器。Web server 将 CGI 环境变量和标准输入发送到 FastCGI 子进程 php-cgi.exe 。

而 PHP 在 Apache 中一共有三种工作方式:CGI 模式、FastCGI 模式、Apache 模块 DLL,所以从某种角度上来说,以 Apache 模块方式安装的 PHP有着比  CGI 模式更好的安全性以及更好的执行效率和速度。

以  FastCGI 模式运行 PHP 有几个主要的好处。首先就是 PHP 出错的时候不会搞垮 Nginx或者Apache,只是PHP自己的进程当掉,但 FastCGI 会立即重新启动一个新  PHP 进程来代替当掉的进程,这就是用多耗些内存来保证PHP的运行。其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好。

也就是说,如果同样只用FastCGI模块,你不如用Nginx。如果是使用Apache了,肯定是要把它的三个模式都开启了,来提高效率和速度。为了让服务器更好地处理请求,实现静态html由 Nginx 负载,PHP 文件由 Apache 加载,所以使用LNAMP。

考虑用不用 LNAMP ,就想想他所解决的问题是不是你也存在的问题。思考Nginx报502错误是因为内存不够的问题,还是访问量太多的问题。你应该知道多运行一个 Apache 是要多消耗些资源的。我觉得 LNAMP 是难普遍开来的,毕竟小网站始终是多过大网站的。

说到底,如果你的网站足够强大的话,请先考虑你的硬件设备而不是软件配置。

事实像我这种只耗到180内存的小网站,是不必配置 LNAMP 的。至于有些人装 Apache 只是为了解决伪静态的话,那是买牍还珠的行为。尽管Apache的伪静态设置资料更多,更为人熟知,但现在一些主流的建站程序都是有相应的 Nginx 的伪静态设置文件,而 Nginx 的英文配置文档也在逐渐地增多。

装好了LNMP后,我还想过适当地对 Nginx 进行配置优化,就是设进程数什么的。网上很多博客的配置方案是不靠谱的,因为你都不知道别人的主机条件如何,访问量有多少,所以不能乱参照。一装好LNMP,我冲动而无知地改了几次,就出现了几次的502。小网站思考根本没有的大问题,我可爱了。

我知道网上真正可细节地学习的是张宴的 Nginx 优化方案。但我都没去看过,因为失败地改了几次后,我就觉得自己相当无聊,只要动脑子想想就知道我没必要去搞。我都花钱买了512的内存了,不用白不用,优化来干嘛呢。现在也就只使用了180左右,再hold多一个相同的网站都没有问题。大家应当要最划算地使用资源,而不是最节省地使用资源。只要我还能付得起这个费用,只要网站不出现问题,就不必去思考配置。在价值优先的前提下,一切从简。

最后,这篇文章可能有些深了,没有经过大量阅读的话可能会不知所云。其实对于一些模块的概念和配置法我也是不清楚的,也不需要深知。知道和理解了其用途,就能明白整个方法论的原理。

前一阵,也在雨迹的博客看到关于这个话题的讨论——《乱侃Apache和Nginx》,他写得比较简。如果没看懂此文,再阅读多几篇文章吧,你会懂的!

加入对话

9条评论

  1. 我很佩服你能耐心弄下来,还做出一番比较。写这样的东西带来的评论是最打击人的,倒不如关闭评论省得一堆路过看不懂的。

  2. @Ray Chow
    其实我并不怎么关心评论的多少,而且看不懂也无罪,辛苦他们还要留言告诉我看不懂。
    我觉得会有很多人搜索进来的,读一遍知道了,然后就走了。
    最后,你能收到我的邮件回复通知了么?

  3. 那就再HOLD一个相同的站 。哈哈。我个人对数据很敏感。总是担心数据丢失。所以现在我的服务器是 E5620+16G 内存 + 4T 硬盘。WIN Server 2008 + IIS 7.5 。我的站在一个虚拟出来的 IIS 6上放着。对数据太敏感了。总怕丢失,不知道是不是病。。。 [洋葱头11]

  4. @阿辉博客
    感觉没什么要做的了,等我先把现在的网站都运营好了,再进行扩展,哈哈 [洋葱头17]
    话说,我对数据也很敏感,因此一定要备份的,我现在是每天都备份一次! [兔06]

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据