一、什么是LAMP
LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 這些軟件都是開源免費的軟件,幾個程序各自是獨立的,經常為了達到我們需要的效果而協同工作,組成了我們常見的LAMP架構平台!LAMP是世界上最流行的組合,當然同時也有Nginx,也就是LNMP:LAMP 相對於 NGINX 來說較為安全,但是Nginx處理高並發比Apache要強,
NGINX 相對於 LAMP 來說安全較為差一點,同樣的配制環境負載遠遠高於 LAMP 向國內的一些大公司,淘寶、新浪都在用這一些 NGINX,像那么大的公司網站需要用到服務器群用LAMP搭建環境成本遠遠大於NGINX。打個比方本來1000000W訪問量需要 10台LAMP環境服務器才能完成,但是使用NGINX也許只需要5、6台這樣一來對於這樣的公司來說就大大的節約了成本。
從網站的流量上來說,70%以上的訪問流量是LAMP來提供的,LAMP是最強大的網站解決方案,在以前這句話沒有錯,但是在現在,這句話有待證實!!!因為在以后的過程中,會發現我們會使用的架構是Nginx和Apache結合使用:使用Nginx可以做集群等相關配置,可以和apache一起使用,有的會用apache去跑php,然后用nginx做反向代理,比如apache運行在8080端口,nginx在80端口,訪問php文件時,反向代理到apache,靜態頁通過nginx處理。nginx支持高並發,apache對php的運行比較穩定。
常見的網頁類型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等Apache本事只處理靜態頁面,處理動態頁面需要使用libphp5.so這個模塊去工作,編譯php也其實是將一個至關重要的模塊打入到apache內部,然后apache收到php請求,將請求交給這個模塊來處理!
二、LAMP的架構以及通信過程
LAMP的架構:
LAMP是一個多C/S架構的平台,最初級為web客戶端基於TCP/IP通過http協議發起傳送,這個請求可能是動態的,也可能是靜態的。
所以web服務器通過發起請求的后綴來判斷,如果是靜態的資源就由web服務器自行處理,然后將資源發給客戶端。如果是動態這時web服務器會通過CGI(Common Gateway interface)協議發起給php。
這里但是如果php是以模塊形式與Web服務器聯系。那么他們是通過內部共享內存的方式。如果是php單獨的放置與一台服務器,那么他們是通過sockets套接字監聽的方式通信(這又是一個C/S架構)。
這時php會相應的執行一段程序,如果在執行程序時,需要用到數據。那么php就會通過mysql協議發送給mysql服務器(也可以看作是一個C/S架構)。由mysql服務器處理,將數據供給php程序。
LAMP流程
1. 用戶發送http請求到達httpd服務器
2. httpd解析url獲取需要的資源的路徑,通過內核空間讀取硬盤資源,如是靜態資源,則構建響應報文,發回給用戶
3. 如果是動態資源,將資源地址發給php解析器,解析php程序文件,解析完畢將內容發回給httpd,httpd構建響應報文,發回給用戶
4. 如果涉及到數據庫操作,則利用php-mysql驅動,獲取數據庫數據,返回給PHP解析器。
三、A,M,P是怎么聯動起來工作的呢
apache + php結合的方式大概幾種
第一種:把php編譯時直接編譯成apache的模塊、module模塊化的方式進行工作(apahce默認的這種方式)。
第二種:CGI、通用網關接口、apache基於CGI跟hph通信
第三種:fastcgi、他也是一種協議、在這種模塊下他們兩個是這樣結合的:
本來php是做為一個模塊或都是php解析器運行的,不是監聽在某個套接字上接收別人的請求的,而是讓別人調用為一個進程使用的,可能是做為別人的子進程在運行,但是工作在fastcgi這種模塊下的hph自行啟用為一個服務進程,他監聽在某個套接字上,隨時可以接受來自客戶端的請求的,他也是有一個主進程的,為了可以響應多個用戶的請求,他會啟用多個子進程,這些子進程我們也可以稱為工作進程,他也是有空閑進程的,一但有客戶請求他馬上使用空閑的進程響應客戶端的請求,將結果返回給前端的調用者,在php5.3.3版本之前他是沒有這個能力了,只能工作在模塊和CGI的方式下,而在5.3.3之后這個模塊直接被收進php模塊中,這種模塊就叫php-fpm。
所以在以后編譯php時,要想跟apache結合,就要編譯成php-fpm,這是基於fastcgi工作的模式,並啟動這服務進程,也就意味着他是通過套接字跟前端的調用者通信,既然基於套按字通信了,那么前端的web服務器和后面的php服務器完全可以工作在不同的主機上,實現了所謂的分層機制。
apache不會跟數據庫打交道,他是個靜態web服務器,跟數據庫打交道的是應用程序,作為應用程序的源驅動能夠基於某個API跟服務器之間建立會話,而后他會通過我們的mysql語句發送給數據庫,數據庫再將結果返回給應用程序,不是php進程,而是php進程中所執行的代碼。
php + mysql的通信
PHP跟mysql怎么整合起來呢,php又怎么被httpd所調用呢
首先httpd並不具備解析代碼的能力,他要依賴於php的解析器,接着php本身不依賴於mysql,他只是一個解析器,能執行代碼就OK了,那他什么時候用到mysql呢,如果要在mysql中存數據時才用到mysql,只是當php中有運行mysql語句時才用到mysql。
php語言要想聯系mysql,通常用到php的驅動,rpm包的叫php_mysql,php跟mysql沒有一點關系,只有程序員在php中編寫mysql語句時才連接mysql來執行sql語句的。
基於php-mysql去連接mysql只使用一個函數mysql_connect();而mysql_connect()正是php-mysql提供的一個API,只要指明要連接的服務器即可。
LAMP相關網站
Apache=http://httpd.apache.org/ httpd主程序包
MySQL=http://dev.mysql.com/downloads/mysql/ mysql主程序包
PHP=http://php.net/downloads.php php主程序包
apr=http://apr.apache.org/ apr是httpd的依賴包
apr-util=http://apr.apache.org/ apr-util是httpd的第二個依賴包
apr和apr-util這個兩個軟件是對后端服務軟件進行優化的,apr-util只是在apr的基礎上提供了更多的數據結構和操作系統封裝接口而已。
pcre 是httpd的第三個依賴包 http://pcre.org/
PCRE(Perl Compatible Regular Expressions中文含義:perl語言兼容正則表達式)是一個用C語言編寫的正則表達式函數庫,PCRE被廣泛使用在許多開源軟件之中,最著名的莫過於Apache HTTP服務器和PHP腳本語言、R腳本語言,此外,正如從其名字所能看到的,PCRE也是perl語言的缺省正則庫。
用Ctrl+R搜索歷史命令;當你執行了一串相當長的命令之后,你只要用關鍵字搜索一下歷史命令然后重新執行這條命令而不需要將整條命令再輸一遍。方法是:按下Ctrl+R然后輸入關鍵字。如搜索”date”,則顯示歷史的命令中含有”date”的命令 date "+今天是:%F,%A,時間是:%T.准備吃飯去"。按回車,就可以重新執行這條命令了,而按左箭頭鍵或右箭頭鍵則可以直接修改,改完之后按回車執行,非常方便!
四、部署LAMP
第一步:下載軟件
[root@ren3 ~]# yum -y install httpd php php-mysql mariadb-server
第二步:配置數據庫
[root@ren3 ~]# systemctl restart mariadb #啟動數據庫
[root@ren3 ~]# mysql -u root -p #進入數據庫
MariaDB [(none)]> create database ren; #創建ren數據庫,需;結尾
MariaDB [(none)]> grant all on *.* to ren3@'localhost' identified by '123'; #授權給ren3用戶所有庫所有表,在本地主機上登錄,用123密碼認證
MariaDB [(none)]> exit #退出
第三步:上傳WordPress博客
[root@ren3 ~]# cd /var/www/html/ #進入httpd工作目錄
[root@ren3 html]# rz
[root@ren3 html]# ls
wordpress-3.3.1-zh_CN.zip
[root@ren3 html]# yum -y install unzip #下載解壓工具
[root@ren3 html]# cd wordpress/
[root@ren3 wordpress]# ls
[root@ren3 wordpress]# cp wp-config-sample.php wp-config.php #修改配置文件
[root@ren3 wordpress]# vim wp-config.php
/** WordPress 數據庫的名稱 */
define('DB_NAME', 'ren');
/** MySQL 數據庫用戶名 */
define('DB_USER', 'ren3'); #和授權用戶保持一致
/** MySQL 數據庫密碼 */
define('DB_PASSWORD', '123');
/** MySQL 主機 */
define('DB_HOST', 'localhost');
第四步:修改httpd配置文件
[root@ren3 wordpress]# vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
DirectoryIndex index.php index.html #修改默認主頁文件
</IfModule>
[root@ren3 wordpress]# rm -rf /etc/httpd/conf.d/welcome.conf
[root@ren3 wordpress]# systemctl restart httpd
[root@ren3 wordpress]# firewall-cmd --add-port=80/tcp
第五步:訪問
五、部署LNMP
第一步:安裝服務程序
[root@ren3 ~]# yum install nginx php php-mysql php-fpm mariadb-server -y
下載php-fpm需要用到下面的源
[centos]
name=centos base
enabled=1
gpgcheck=0
baseurl=http://mirrors.163.com/centos/7/os/x86_64/
第二步:修改nginx配置文件
[root@ren3 ~]# vim /etc/nginx/nginx.conf
server {
root /var/www/html; #更改網站根目錄
index index.php; #添加index.php默認頁
location ~ php$ { #定義一個匹配PHP文件的規則
fastcgi_pass 127.0.0.1:9000; #php-fpm監聽的地址
include fastcgi.conf; #加載fastcgi文件
}
}
第三步:重啟nginx和php-fpm
[root@ren3 ~]# systemctl restart nginx
[root@ren3 ~]# systemctl restart php-fpm
[root@ren3 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 127.0.0.1:9000
第四步:上傳WordPress並編輯
第五步:啟動數據庫並創建數據庫和用戶
第六步:瀏覽器訪問