09年末入创业型小公司,技术岗位摸爬滚打一年多,10年末有幸加盟大型互联网公司,在解决了终身大事之后,闲来之时有意总结工作中所思所想,于是有了这一系列文章,技术不精,文笔粗糙,贻笑大方了。本文是系列文章中的第一篇,主题在于LAMP架构中的L组件。
为避免歧义,本系列文章中的LAMP是指Linux+Apache+MySQL+PHP。LAMP、JAVA/J2EE以及.NET构成当前web架构的三足鼎立。LAMP架构相比于JAVA/J2EE,其有轻量,快速部署等明显优点;跟.NET相比,其具有跨平台,高性能低价格等优点。如果你的企业时间有限,成本控制意识强烈,LAMP架构是你最好的选择。本系列文章主要关注LAMP组件本身的配置优化问题,对于应用程序的优化则不在我的讨论范围之内。
我的第一份工作是在一家小型的创业型的公司做服务器端程序开发。公司主要业务是SNS网页游戏的开发,现在线上游戏也有好几个,由于各方面原因,游戏都不怎么成功,不过回忆总结那段时间,还是学到了不少东西。当时公司的开发服务器、运营服务器上的LAMP环境是我搭建起来的,由于经验有限,当时只要系统跑起来就OK了,并没有考虑过多的性能优化。后来随着在线人数的激增,才慢慢去做一些优化的工作。
关于L,有个版本的问题,当前Unix-like版本实在太多了。选择什么版本作为我们服务器的系统?我当时选择了CentOS。出于免费的原因,我们不去考虑红帽的各种企业版。CentOS 是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在 RHEL 的基础上修正了不少已知的 Bug ,相对于其他 Linux 发行版,其稳定性值得信赖。而且工作之前我有两年多的Fedora使用经验,Fedora和CentOS的关系,让我更加坚定的选择了CentOS。
由于是回忆总结性质的文章,我不打算把LAMP的各版本号全部都列出来,对于我这篇文章,并不妨碍讨论。几乎所有的linux版本都会包含LAMP,从这个意义上说安装配置LAMP环境是轻而易举的。安装的简便性使人误以为这些LAMP组建会自动顺利的运行,这往往事与愿违。最终,应用程序的负载会超过后端服务器的自带的设置的处理能力。因此,自己完全掌控LAMP组建的配置尤为重要,健全的监控机制也很重要,因为它们是你优化系统的唯一依据。
一般而言,我们的服务器都是远程托管的,因此,服务器具备远程管理能力异常重要。现在一般是通过SSHD。在大多数的Linux操作系统中,都自带有一款open-ssh远程管理与控制的服务软件:SSHD,SSH是一个远程登陆工具。采用SSL协议加密,在安全性方面比传统的Telnet要高。同时SSHD带有SCP、SFTP功能,可以很方便地实现本地到远程管理控制、远程到远程的文件传输。 默认情况下,安装完CentOS以后,配置好网络后就可以通过SSHD远程连接主机了。进行远程管理的时候,借用类似于putty、SecureCRT等工具可以在windows平台下完成,十分方便。
创建一个高性能的web站点,你需要遵守的众多基本原则之一是:使用标准的安装路径和配置。应用程序从开发到部署,原则上需要经过三种类型的服务器:开发服务器,测试服务器以及运营服务器。如果我们不使用标准的安装路径和配置,那么在这三种类型的服务器之间进行迁移的时候极有可能出现错误,需要各种费时费力的调整才可以运行,维护起来也比较麻烦。
另一方面,遵守这一原则,会极大的方便你的权限分配,备份,监控等操作。从操作系统层面来说,在安装时候,要分配出var分区,用于存放web服务器的日志文件。如果你恰当的配置你的系统,那么var会分离成一个相对独立的文件系统,这样带来的好处之一就是:如果应用程序突然写入大量的日志并占用完你的磁盘空间,应用程序不至于崩溃。如果日志文件和主代码混在一起,则后果比较严重,应用程序就会崩溃。别忘了,日志的轮替机制有可能失效。这一点很重要。
开始考虑LAMP架构的时候,谁都不会忽略安全方面的考虑。这里简单提一下SELinux。关于SELinux,经常会由于配置方面的原因给你带来不少麻烦,网上随便一搜,到处是如何关闭这一安全利器的文章,是有点遗憾。其实,只要你认真看完这里(点我),你就足以利用SELinux来保护你的web Server了,你要知道,关闭了SELinux,并不是一种优雅的解决问题的方法。
如果需要足够的安全,专门的硬件防火墙必不可少,除此之外,你还应配置iptables。网上有说,最佳实践的iptables配置有五页左右,而我看看默认的CentOS配置说明仅有10行左右,明显不足。另外,请别使用root账户来运行Apache,虽然root用户安装软件包很方便,完全没有权限困扰,但是如果你的Apache是由root用户运行的,那就相当于别有用心的进入你的Apache就意味这他接管了你的系统。
我对操作系统也就是LAMP中的L对整个LAMP架构的影响体会不是很深,希望各位看官莫笑,还请多多赐教。