LAMP架構——我的工作心得
圖-LAMP
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站點,你需要遵守的眾多基本原則之一是:使用標準的安裝路徑和配置。應用程序從開發到部署,原則上需要經過三種類型的服務器:開發服務器,測試服務器以及運營服務器。如果我們不使用標準的安裝路徑和配置,那么在這三種類型的服務器之間進行遷移的時候極有可能出現錯誤,需要各種費時費力的調整才可以運行,維護起來也比較麻煩。
另一方面,遵守這一原則,會極大的方便你的權限分配,備份,監控等操作。從操作系統層面來說,CentOS在安裝時候,要分配出var分區,用于存放web服務器的日志文件。如果你恰當的配置你的系統,那么var會分離成一個相對獨立的文件系統,這樣帶來的好處之一就是:如果應用程序突然寫入大量的日志并占用完你的磁盤空間,應用程序不至于崩潰。如果日志文件和主代碼混在一起,則后果比較嚴重,應用程序就會崩潰。別忘了,日志的輪替機制有可能失效。這一點很重要。
開始考慮LAMP架構的時候,誰都不會忽略安全方面的考慮。這里簡單提一下SELinux。關于SELinux,經常會由于配置方面的原因給你帶來不少麻煩,網上隨便一搜,到處是如何關閉這一安全利器的文章,是有點遺憾。其實,只要你認真看完這里(點我),你就足以利用SELinux來保護你的webserver了,你要知道,關閉了SELinux,并不是一種優雅的解決問題的方法。
如果需要足夠的安全,專門的硬件防火墻必不可少,除此之外,你還應配置iptables。網上有說,最佳實踐的iptables配置有五頁左右,而我看看默認的CentOS配置說明僅有10行左右,明顯不足。另外,請別使用root賬戶來運行Apache,雖然root用戶安裝軟件包很方便,完全沒有權限困擾,但是如果你的Apache是由root用戶運行的,那就相當于別有用心的進入你的Apache就意味這他接管了你的系統。
我對操作系統也就是LAMP中的L對整個LAMP架構的影響體會不是很深,希望各位看官莫笑,還請多多賜教。
通過文章我, 想必大家通過我的體會和指導,都了解了LAMP對LAMP架構很好用!
【編輯推薦】
- LAMP攻略之PHP執行sql語句的寫法
- LAMP攻略之MySQL數據庫結構和數據導出及導入
- LAMP攻略之MySQL索引
- LAMP快速構建apache web服務器
- LAMP攻略之Apache與PHP的整合過程
- LAMP環境下Apache + SSL Howto譯文
- LAMP下Apache-mysql-php安裝