1、什麼是LAMPphp
LAMP=Linux Apache Mysql/MariaDB PHP/Perl/Python 這些軟件都是開源免費的軟件,幾個程序各自是獨立的,常常爲了達到咱們須要的效果而協同工做,組成了咱們常見的LAMP架構平臺!LAMP是世界上最流行的組合,固然同時也有Nginx,也就是LNMP:LAMP 相對於 NGINX 來講較爲安全,可是Nginx處理高併發比Apache要強,html
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的運行比較穩定。mysql
常見的網頁類型:htm,html,shtml,stm.php,asp,aspx,shtm,jsp等等Apache本事只處理靜態頁面,處理動態頁面須要使用libphp5.so這個模塊去工做,編譯php也實際上是將一個相當重要的模塊打入到apache內部,而後apache收到php請求,將請求交給這個模塊來處理!nginx
2、LAMP的架構以及通訊過程程序員
LAMP的架構:web
LAMP是一個多C/S架構的平臺,最初級爲web客戶端基於TCP/IP經過http協議發起傳送,這個請求多是動態的,也多是靜態的。正則表達式
因此web服務器經過發起請求的後綴來判斷,若是是靜態的資源就由web服務器自行處理,而後將資源發給客戶端。若是是動態這時web服務器會經過CGI(Common Gateway interface)協議發起給php。sql
這裏可是若是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解析器。
3、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.準備吃飯去"。按回車,就能夠從新執行這條命令了,而按左箭頭鍵或右箭頭鍵則能夠直接修改,改完以後按回車執行,很是方便!
4、部署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
第五步:訪問
5、部署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並編輯
第五步:啓動數據庫並建立數據庫和用戶
第六步:瀏覽器訪問