一、LAMP
1、概念
LAMP指的Linux(操作系統)、ApacheHTTP 服務器,MySQL(有時也指MariaDB,數據庫軟件) 和PHP(有時也是指Perl或Python) 的第一個字母,一般用來建立web應用平臺。
2、web資源的類型
靜態資源:原始形式與相應內容一致。 動態資源:原始形式通常爲程序文件,需要在服務器端執行之後哦,將執行結果返回給客戶端。
3、LAMP結構
CGI:Commom Gateway Interface可以讓一個客戶端從網頁瀏覽器通過http服務器向執行在網絡服務器上的程序傳輸數據;CGI描述了客戶端與服務器程序之間傳輸的一種標準。 程序=指令(代碼文件)+數據(數據存儲系統、文件)
請求過程:
Client--(http協議)-->httpd-->(CGI)-->application server(program file)-->(mysql)-->mysql
二、PHP
1、PHP簡介
PHP(PHP: Hypertext Preprocessor)是通用服務器端腳本編程語言,主要用於web開發實現動態web頁面,也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,其也可以在大多數系統上作爲一個獨立的shell來使用
2、PHP配置
(1)配置文件
/etc/php.ini /etc/php.d/*.ini 配置文件在php解釋器啓動時被讀取。
(2)配置文件格式
directive = value
註釋符:
#:純粹的註釋信息 ;:用於註釋可啓用的directive;較新的版本中,已經全部使用“;”進行註釋。
(3)php.ini配置文件設置
max_execution_time = 30 #最長執行時間30s
memory_limit 128 #內存限制,但是實際生產中不夠,可調大此值
display——startup_errors off #顯示啓動時出錯信息,建議關閉,如果不關閉,會有可能顯示一些重要信息
post_max_size 8M #最大上傳數據大小,生產環境中可能臨時調大
upload_max_filesize 2M #最大上傳文件大小,生產環境中可能要調大。但是要比post_max_size值要小。
max_file_uploads = 20 #同時上傳最多文件數
date.timezone = Aisa/shanghai #指定時區
short_open_tag = on 開啓端標籤,如<?phpinfo()>
如果想了解更多請查看http://php.net/manual/zh/ini.core.php
(4)PHP的加速器
php的加速器:基於PHP的特殊擴展機制如opcode緩存擴展也可以將opcode緩存於php的共享內存中,從而可以讓同一段代碼的後續重複執行時跳過編譯階段以提高性能。這些加速器並非真正提高了opcode的運行速度,而僅是通過分析opcode後並將它們重新排列以達到快速執行的目的。
類型
APC (Alternative PHP Cache)遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於PHP 5.4 項目地址http://pecl.php.net/package/APC
eAccelerator源於Turck MMCache,早期的版本包含了一個PHP encoder和 PHP loader,目前encoder已經不在支持。項目地址 http://eaccelerator.net/
XCache快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用於生產環境。項目地址:http://xcache.lighttpd.net/,收錄EPEL源
Zend Optimizer和Zend Guard Loader Zend Optimizer並非一個opcode加速器,它是由ZendTechnologies爲PHP5.2及以前的版本提供的一個免費、閉源的PHP擴展,其能夠運行由Zend Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專爲PHP5.3提供的類似於Zend Optimizer功能的擴展。項目地址http://www.zend.com/en/products/guard/runtime-decoders
加速器,它支持裝載通過NuSphere PHP Encoder編碼的PHP程序文件,並能夠實現對常規PHP文件的 執行加速。項目地址,http://www.nusphere.com/products/phpexpress.htm
三、LAMP構建
我們在構建LAMP服務時,需要每一個服務都要測試成功,必須在安裝完此服務之後,測試服務是否工作正常;與其他服務是否能測試成功。在安裝之前我們必須得知道php是依賴於mysql\mariadb和apache服務的,所有我們必須按前兩個服務再安裝php。如果先安裝php也不是不可,慢慢的拍錯,想必一定會成功的。
下面的過程在CentOS 6 中進行配置。
1、httpd安裝
(1)使用yum源安裝
[root@localhost ~]# yum install -y httpd
(2)配置主配置文件/etc/httpd/conf/httpd.conf
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
ServerTokens prod #修改響應報文顯示系統信息 ServerName www.example.com:79 #如果不開啓這項,啓動會提示如下內容: Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
(3)設爲開機啓動並啓動httpd服務
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# service httpd start
[root@localhost ~]# ss -tnl
#建議啓動後查看端口是否啓動
(4)測試是否成功
2、mysql安裝
(1)使用yum源安裝
[root@localhost ~]# yum install -y mysql-server
(2)設置爲開機啓動並啓動mysql服務
[root@localhost ~]# chkconfig mysqld on
[root@localhost ~]# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]# service mysqld start
(3)初始化數據庫
[root@localhost ~]# mysql_secure_installation
詳細的內容向看mysql配置http://merit.blog.51cto.com/10757694/1968557
(4)創建用戶
mysql> CREATE DATABASE wpdb;
#創建數據路
mysql> GRANT ALL PRIVILEGES ON wpdb.* TO joah@'localhost' IDENTIFIED BY '123456';
#授權用戶對wpdb權限
mysql> GRANT ALL PRIVILEGES ON wpdb.* TO joah@'127.0.0.1' IDENTIFIED BY '123456';
#授權用戶對wpdb權限
mysql> SELECT user,host,password FROM mysql.user;
+------+-----------+-------------------------------------------+ | user | host | password | +------+-----------+-------------------------------------------+ | root | localhost | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 | | root | 127.0.0.1 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 | | joah | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | joah | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +------+-----------+-------------------------------------------+ 4 rows in set (0.00 sec)
(5)測試是否成功
[root@localhost ~]# mysql -ujoah -p
3、php安裝
(1)使用yum源安裝php
[root@localhost ~]# yum install -y php
php安裝相當於添加了一份配置文件在/etc/httpd/conf.d/
目錄,如果要使其生效重新啓動httpd服務即可。
4、測試php和httpd是否配置成功
(1)在/var/www/html
目錄下創建文件測試
[root@localhost html]# vim index.php
<?php echo "<h>success</h>"; phpinfo(); ?>
[root@localhost html]# service httpd restart
#重啓測試是否成功
5、測試php是否可以和數據庫連接成功
(1)php-mysql安裝
不過在測試之前需安裝一個程序包使其能相互關聯作用。
The php-mysql package contains a dynamic shared object that will add MySQL database support to PHP. MySQL is an object-relational database management system. PHP is an HTML-embeddable scripting language. If you need MySQL support for PHP applications, you will need to install this package and the php package. 提供了一個動態分享庫使mysql數據庫支持php
[root@localhost ~]# yum install -y php-mysql
(2)編輯index.php文件
測試方法一:
<?php $conn = mysql_connect('localhost','joah','123456'); if($conn) echo "ok"; else echo "failure"; mysql_close(); ?>
測試方法二:
編輯index.php
文件
<?php $mysqli=new mysqli("localhost","joah","123456"); if(mysqli_connect_errno()){ echo "failure"; $mysqli=null; exit; } echo "ok"; $mysqli->close(); ?>
此時我們就可以使用這個環境構建一些軟件等;下面我們從phpMyadmin和wordpress這兩個軟件進行說明。
安裝phpMyadmin
(1)上傳軟件包並進行編譯安裝
[root@localhost ~]# mv phpMyAdmin-4.3.5-all-languages.zip /usr/local/src/
#將上傳的軟件包移到到此目錄下方便管理源碼編譯的安裝包
[root@localhost src]# unzip phpMyAdmin-4.3.5-all-languages.zip -d /var/www/html/
#將此包解壓至/var/www/html
目錄下
(2)配置配置文件
[root@localhost html]# ln -sv phpMyAdmin-4.3.5-all-languages/ pma
#創建軟連接
[root@localhost pma]# cp config.sample.inc.php config.inc.php
#準備配置文件 [root@localhost pma]# vim config.inc.php
#編輯配置文件在下面行輸入隨機數即可
重啓服務測試,測試幾次也不行。通過官網上查看原來php此不支持phpMyadim這個版本。
重新下載一個較低版本安裝
[root@localhost html]# unzip phpMyAdmin-4.0.5-all-languages.zip
[root@localhost html]# ln -sv phpMyAdmin-4.0.5-all-languages pem
#創建軟連接
[root@localhost pem]# cp config.sample.inc.php config.inc.php
[root@localhost pem]# vim config.inc.php
重啓服務測試
此時會出現錯誤提示,安裝mbsting包即可
[[root@localhost src]# rpm -ivh php-mbstring-5.3.3-22.el6.x86_64.rpm --force
#由於在CentOS6中屬於epel所以需要配置epel源,但是由於本機上不了網,所以這種方式安裝
重啓httpd服務測試是否成功
成功,接下來就是自己配置過程了 ,此時登錄的用戶名和密碼是數據庫授權的用戶和密碼。
wordpress安裝
WordPress是使用PHP語言開發的博客平臺,用戶可以在支持PHP和MySQL數據庫的服務器上架設屬於自己的網站。也可以把 WordPress當作一個內容管理系統(CMS)來使用。WordPress是一款個人博客系統,並逐步演化成一款內容管理系統軟件,它是使用PHP語言和MySQL數據庫開發的。用戶可以在支持 PHP 和 MySQL數據庫的服務器上使用自己的博客。<摘自:百度>
(1)解壓縮安裝
[root@localhost src]# tar xvf wordpress-4.8.tar.gz -C /var/www/html/
(2)準備配置文件
方式一:[root@localhost wordpress]# cp wp-config-sample.php wp-config.php
[root@localhost wordpress]# vim wp-config.php
#編輯此配置文件
方式二:
[root@localhost wordpress]# setfacl -Rm u:apache:rwx wordpress
#由於是基於apache用戶運行所有給apache用戶對此文件rwx權限即可
(3)測試是否成功
http://192.168.4.59/wordpress/wp-admin/setup-config.php
然後下面就可以搭建自己的博客啦!
注意在裝完數據庫之後切記一定要把剛剛授權的權限刪除[root@localhost html]# setfacl -b blog/
CentOS 7搭建LAMP環境
(1)安裝httpd服務並測試
(2)安裝mariadb服務並測試
(3)安裝php並測試與httpd和mariadb能否相關連接
(4)搭建phpMyadimn
(5)搭建wordpress
上述幾部與CentOS6安裝都基本類似,這裏就不再累述。
(6)測試性能如何
下面我們測試以性能如何:
[root@localhost html]# ab -c 10 -n 100 http://192.168.4.60/blog/
HTML transferred: 5209700 bytes Requests per second: 18.88 [#/sec] (mean) #這裏是顯示的測試結果 Time per request: 529.736 [ms] (mean) Time per request: 52.974 [ms] (mean, across all concurrent requests) Transfer rate: 965.32 [Kbytes/sec] received
由於之前介紹過php加速器我們來安裝一個加速器測試下性能如何?
(1)源碼編譯安裝xcache
[root@localhost src]# yum install -y php-devel
#安裝前需要安裝所依賴的包
[root@localhost src]# tar xvf xcache-3.2.0.tar.bz2
(2)安裝php加速器測試性能
[root@localhost/usr/local/src]#yum install -y php-devel
#安裝此包,提供php擴展爲編譯
[root@localhost/usr/local/src/xcache-3.2.0]#phpize
#生成configure配置文件等
[root@localhost/usr/local/src/xcache-3.2.0]#./configure --enable-xcache --with-php-config=/usr/bin/php-config
[root@localhost/usr/local/src/xcache-3.2.0]#make && make install
[root@localhost/usr/local/src/xcache-3.2.0]#cp xcache.ini /etc/php.d/
#複製配置文件
(3)重啓服務,測試性能如何
[root@localhost/usr/local/src/xcache-3.2.0]#systemctl restart httpd.service
[root@localhost/usr/local/src/xcache-3.2.0]#ab -c 10 -n 100 http://192.168.4.60/wordpress
Total transferred: 5236400 bytes HTML transferred: 5209700 bytes Requests per second: 53.82 [#/sec] (mean) #性能相當於提升了一倍 Time per request: 185.804 [ms] (mean) Time per request: 18.580 [ms] (mean, across all concurrent requests) Transfer rate: 2752.19 [Kbytes/sec] received
因此可以看出加速器對於php起到一定的加速作用,這裏需要注意在php更高版本不再xcache不再支持。
三、CGI和FastCGI
1、CGI
CGI(Common Gateway Interface,通用網關接口),HTTP服務器與你的貨其他機器上的程序進行交談的工具,其程序一般運行在網絡服務器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。
2、FastCGI
FastCGI像是一個常駐型的CGI,它可以一直執行,只要激活後,不會每次都要花費時間去fork一次。
工作原理
(1)Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
(2)FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連接。
(3)當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。 Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
(4)FastCGI 子進程完成處理後將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時, 請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了。
3、php-fpm和FastCGI
(1)兩者之間有何聯繫
php的解析器是php-cgi,只能解析請求,返回結果,不會對進程管理;爲了能調用php-cgi進程程序,php-fpm就誕生了。
在CentOS 6 中:
PHP-5.3.2之前,默認不支持fpm機制,需要自行打補丁並編譯安裝;
httpd-2.2:默認不支持fcgi協議,需要自行編譯此模塊;
爲了能在CentOS 6 中支持此功能,編譯安裝http和php即可。
在CentOS 7中:
httpd-2.4:rpm包默認編譯支持了fcgi模塊
php-fpm包:專用於將php運行於fpm模式
(2)配置文件
這裏在CentOS7中對php-fpm配置文件進行講解
[root@localhost~]#yum install -y php-fpm
#直接使用yum源安裝即可
主配置文件:
/etc/php-fpm.conf 和 /etc/php-fpm.d/*.conf
選項介紹:
pm = static(固定數量的子進程)|dynamic(以動態模式管理) pm.max_children 最大子進程 pm.start_servers 初始化時開啓的子進程 pm.min_spare_servers 最小空閒子進程 pm.max_spare_servers 最大空閒子進程 pm.max_requests 每個子進程最大請求數量 php_value[session.save_handler] 設置類型 php_value[session.save_path] 文件的存儲位置
爲了確保運行php-fpm進程的用戶對session目錄有讀寫權限
mkdir /var/lib/php/session chown apache.apache /var/lib/php/session
如果想支持遠程主機:修改配置文件/etc/php-fpm.d/www.conf
listen 格式: ip.add.re.ss:port port listen.allowed_clients 允許遠程who連接,默認any listen.backlog 等待隊列的長度,-1表示無限制
(3)使http支持php-fpm
確認httpd程序是否已經加載了proxy_fcgi_module
[root@localhost/etc/php-fpm.d]#httpd -M |grep fcgi
#必須加載了這個模塊才能支持php-fpm
進行配置
[root@localhost/etc/httpd/conf.d]#vim fastcgi.conf
DirectoryIndex index.php #設置默認索引文件 ProxyRequests off #是否開啓正向代理 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 #路徑匹配
[root@localhost/etc/httpd/conf.d]#ss -tnl
#查看端口是否開啓
下面我們來測試下性能如何?
[root@localhost/etc/httpd/conf.d]#ab -c 10 -n 100 http://192.168.4.60/wordpress/
#測試我們在CentOS 7 搭建的博客
獨立運行的php跟模塊方式運行的php的性能略有提升。