本章blog主要介紹了[LAMP] Linux (Centos)LAMP環境搭建,LAMP源碼安裝及LAMP架構原理詳解,並分別部署php與apache不一樣組合方式的LAMP案例。
php
LAMP Server html
-
LAMP簡介mysql
LAMP網站框架是目前國際上流行的Web服務架構,該框架包括GNU / Linux 操做系統,Apache HTTP服務器,MySQL 類關係型數據庫(RDBMS)以及PHP編程語言。全部組成產品均屬於開源類軟件 ,自己都是各自獨立的程序,可是由於常被放在一塊兒使用,擁有了愈來愈高的兼容度,使其更適用於構建動態網站及開發Web應用程序, 現已成爲國際流行的框架架構。linux
目前不少流行的商業應用都是採起這個架構,和Java/J2EE架構相比,LAMP具備Web資源豐富、輕量、快速開發等特色,與微軟的.NET架構相比,LAMP具備通用、跨平臺、高性能、低價格的優點,所以LAMP不管是性能、質量仍是價格都是企業搭建網站的首選平臺。nginx
-
LAMP組件c++
GNU / Linux 操做系統: web
Linux是一種相似Unix的計算機操做系統,Linux操做系統有不少個不一樣的發行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。sql
Apache HTTP服務器:數據庫
LAMP的HTTP服務器的角色除了由Apache提供外,還包括其餘如nginx等的Web服務器 ;其中,Apache負責傳遞PHP及cgi等動態語言,Nginx提供負載均衡、反向解析及容錯功能,彼此配合使用,成爲HTTP服務器的配置首選模式。apache
MySQL 類關係型數據庫(RDBMS):
MySQL做爲LAMP的關係數據庫管理系統(RDBMS)的原始角色已經由其餘RDBMS(如MariaDB)甚至NoSQL數據庫(如MongoDB)逐步取代。MariaDB由MySQL的創始人Michael Widenius主導開發,其屬於MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可,且MariaDB徹底兼容MySQL;MongoDB是一個Web規模的開源NoSQL數據庫 。
php編程語言:
PHP做爲LAMP的應用程序編程語言的原始角色,也逐步由其餘語言(如Perl和Python)共同執行。PHP是一種服務器端腳本語言,專爲Web開發而設計。PHP代碼由web服務器提供的PHP模塊編譯,支持將PHP命令直接嵌入到HTML源文檔中去執行,執行效率比徹底生成HTML標記的CGI要高許多;Perl是一系列高級,通用,解釋的動態編程語言;Python是一中面向對象的的通用型高級編程語言,Python支持多種編程範例,包括面向對象,命令式,功能和過程範式。
緩存或加速器:
Apache提供了本身的緩存模塊,也可使用外加的Squid模塊進行緩存,這兩種方式都可以有效的提升Apache的訪問響應能力。PHP的加速可以使用xcache加速器,優化和緩存php動態內容,提高了PHP腳本的緩存性能。Memcached是一個分佈式的內存對象緩存系統,一般用於動態Web應用以減輕數據庫負載。
-
LAMP架構原理
客戶端發送http request 請求 ,服務器(Apache)接受web請求;
Apache判斷客戶端請求的資源是否爲靜態請求。如果靜態請求,則Apache直接將客戶端請求的靜態資源(.html, .htm .shtml等文件),經過Http response的形式傳送給客戶端;
若爲php動態請求,則經過CGI協議將客戶端的php請求傳輸給PHP程序,而後由php程序調用php解析器執行php請求。
PHP在執行php請求時判斷是否會依賴mysql數據庫。若不依賴mysql數據庫,則由php解析器直接執行php相關腳本,將解析後的腳本再次經過CGI協議返傳送給Apache.服務器,再執行「靜態請求」的流程;
若依賴mysql數據庫,則php程序經過php-mysql 驅動與mysql進行關聯 ,獲取相關數據 ,而後將其返還給php解釋器 ,再次執行「不依賴mysql數據庫」的流程。
-
apache與php組合方式
Module機制:php直接以httpd的模塊擴展的方式運行,php做爲httpd功能的一部分。啓動httpd進程時 ,亦開啓了php功能。其中prefork模式依賴libphp5.so庫 ,worker、event模式依賴libphp5-zts.so庫
CGI機制:php工做在獨立的進程,當須要解析php請求時,由httpd喚醒php進程。因多個php請求,會啓動多個php進程,須要耗費資源,總體性能不如module機制
Fast-CGI機制:生成php-fpm服務 ,由服務php-fpm管理php進程。基於套接字與apache聯繫 ,與apache work機制相似 ,有父進程,子進程,空閒進程等 ,大大提升了php處理能力。
-
LAMP服務器(server)實驗搭建
根據apache與php組合的不一樣方式,下面將演示LAMP編譯安裝實驗:實驗1、 php 以module 模式訪問 ,實驗二 、配置apache 與fpm方式 的php 。
系統:Centos 6.6
軟件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36
編譯環境:安裝LAMP相關依賴環境,包括「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables 功能
實驗目的:編譯安裝LAMP,經過不一樣的方式,分別實現php 以 modeule 方式訪問和 以Fast-CGI機制下運行 。
LAMP編譯安裝,配置php 以 module 模式訪問
1、配置編譯環境 ,安裝「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables
2、編譯安裝Apache
-
編譯安裝apr(apr-1.6.3)
下載地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz
-
編譯安裝apr-util(apr-util-1.6.1)
下載地址: http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz
-
編譯安裝httpd(httpd-2.4.34)
下載地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz
-
啓動Apache服務並驗證,修改apache的配置文件並設置PidFile路徑(默認在/usr/local/apache/logs/httpd.pid)
3、編譯安裝Mysql
-
建議在硬raid中建立lvm,使用獨立的lvm磁盤做爲mysql 數據存儲目錄 ,便於備份mysql數據
-
編譯安裝mysql
下載地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz
-
mysql初始化,啓動服務
-
對mysql數據庫進行管理,刪除匿名用戶,建立密碼 ,刪除test數據庫 等操做
-
對mysql 建立用戶及密碼、主機配置文件,能夠不使用密碼進行登陸
4、編譯安裝PHP
-
編譯安裝php-5.6.36
下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
-
配置apache 以支持php
-
驗證php功能與apache ,php與mysql 鏈接
5、安裝php加速器xcache
-
安裝xcache
下載地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
-
驗證xcache 安裝
6、安裝phpMyAdmin-4.8.2 ,管理mysql
-
安裝phpMyAdmin-4.8.2 ,支持php5.5- php 7.2 ,mysql-5.5 以上
下載地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz
-
phpMyadmin 登陸http://192.168.4.160/pmyadmin 驗證
-
錯誤故障解決
7、壓力測試
-
ab工具測試
LAMP編譯安裝,實現php-fpm模式
1、配置編譯環境 ,安裝「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables ,與上文配置相同
2、編譯安裝Apache ,與上文配置相同
3、編譯安裝Mysql,與上文配置相同
4、編譯安裝PHP 支持Fast-CGI
-
編譯安裝php-5.6.36
下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
-
配置並啓動 php-fpm 服務
-
配置apache 以支持fast-CGI
-
驗證php功能與apache ,php與mysql 鏈接
5、安裝php加速器xcache,與上文配置相同
6、安裝phpMyAdmin-4.8.2 ,管理mysql ,與上文配置相同
7、壓力測試 ,與上文配置相同
至此,完成LAMP編譯安裝實驗,分別實現 php 以module 模式訪問 和 配置apache 與fpm方式 的php 。