lamp

一、LAMP

1、概念

LAMP指的Linux(操作系統)、ApacheHTTP 服務器,MySQL(有時也指MariaDB,數據庫軟件) 和PHP(有時也是指Perl或Python) 的第一個字母,一般用來建立web應用平臺。

2、web資源的類型

靜態資源:原始形式與相應內容一致。
動態資源:原始形式通常爲程序文件,需要在服務器端執行之後哦,將執行結果返回給客戶端。

3、LAMP結構

LAMP_software_bundle.svg.png

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)測試是否成功

2017-10-10_201625.jpg

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 2017-10-10_201730.jpg

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 #重啓測試是否成功

2017-10-10_202601.jpg

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();
?>

2017-10-10_203951.jpg

測試方法二:

編輯index.php文件

<?php
        $mysqli=new mysqli("localhost","joah","123456");
        if(mysqli_connect_errno()){
            echo "failure";
            $mysqli=null;
            exit;
        }
            echo "ok";
            $mysqli->close();
?>

2017-10-10_205453.jpg

此時我們就可以使用這個環境構建一些軟件等;下面我們從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 #編輯配置文件在下面行輸入隨機數即可 2017-10-10_211650.jpg

重啓服務測試,測試幾次也不行。通過官網上查看原來php此不支持phpMyadim這個版本。

2017-10-10_213054.jpg

重新下載一個較低版本安裝

[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

2017-10-10_211650.jpg

重啓服務測試

2017-10-10_213450.jpg

此時會出現錯誤提示,安裝mbsting包即可

[[root@localhost src]# rpm -ivh php-mbstring-5.3.3-22.el6.x86_64.rpm --force#由於在CentOS6中屬於epel所以需要配置epel源,但是由於本機上不了網,所以這種方式安裝

重啓httpd服務測試是否成功

2017-10-11_080510.jpg

成功,接下來就是自己配置過程了 ,此時登錄的用戶名和密碼是數據庫授權的用戶和密碼。

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 #編輯此配置文件 2017-10-11_091044.jpg

方式二:

[root@localhost wordpress]# setfacl -Rm u:apache:rwx wordpress#由於是基於apache用戶運行所有給apache用戶對此文件rwx權限即可

(3)測試是否成功

http://192.168.4.59/wordpress/wp-admin/setup-config.php

2017-10-11_093859.jpg

然後下面就可以搭建自己的博客啦!

注意在裝完數據庫之後切記一定要把剛剛授權的權限刪除[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 #查看端口是否開啓

2017-10-11_191546.jpg

下面我們來測試下性能如何?

[root@localhost/etc/httpd/conf.d]#ab -c 10 -n 100 http://192.168.4.60/wordpress/#測試我們在CentOS 7 搭建的博客 2017-10-11_191913.jpg

獨立運行的php跟模塊方式運行的php的性能略有提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章