1. 程式人生 > >第24章,實現LAMP架構

第24章,實現LAMP架構

php.ini sys mod_proxy else 騰訊 emctl rgb tro 虛擬主機

更多內容請點擊:

Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~)

http://blog.51cto.com/13683480/2095439


第24章,實現LAMP架構

本章內容:

LAMP介紹

PHP介紹與配置

module方式實現LAMP

php-fpm方式實現LAMP

部署phpmyadmin

部署wordpress

部署discuz!

實現php的 Xcache加速

源碼編譯:安裝LAMP

LAMP介紹:

LAM(M)P 含義:

L:linux

A:apache(httpd)

M: mysql,mariadb

(M): memcached

P: php,perl,python

WEB資源類型:

靜態資源:原始形式與相應內容一致,在客戶端瀏覽器執行

動態資源:原始形式通常為程序文件,需要在服務器端執行之後,將執行結果

返回給客戶端

WEB相關術語:

客戶端技術:html,javascript

服務器端技術:php,jsp,python,asp

CGI:Common Gateway Interface

可以讓一個客戶端,從網頁瀏覽器通過http服務器向執行在網絡服務器上的

程序傳輸數據

CGI描述了客戶端和服務器程序之間的一種標準

請求流程:

Client --(httpd)--> httpd --(cgi) -->

application server(program file)--(mysql) --> mysql

php:

腳本編程語言,嵌入到html中的嵌入式web程序語言

基於zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境)

PHP簡介:

官網:http://www.php.net/

?

PHP是通用服務器端腳本編程語言,主要用於web開發實現動態web頁面,也是最早實現將腳

本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,

其也可以在大多數系統上作為一個獨立的shell來使用

?

Rasmus Lerdorf於1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱作“Personal

Home Page Tool” 的Perl腳本, 這些腳本可以用於顯示作者的簡歷並記錄用戶對其網站的訪

問。後來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫為CGI程序,還為其增加了運行Web

forms的能力以及與數據庫交互的特性,並將其重命名為“Personal Home Page/Forms

Interpreter”或“PHP/FI”。此時,PHP/FI已經可以用於開發簡單的動態web程序了,這即

PHP1.0。1995年6月,Rasmus Lerdorf把它的PHP發布於

comp.infosystems.www.authoring.cgi Usenet討論組,從此PHP開始走進人們的視野。1997

年,其2.0版本發布。

1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成為

PHP發展到3.0的基礎,而且從此將PHP重命名為PHP: Hypertext Preprocessor。此後,這兩

名程序員開始重寫整個PHP核心,並於1999年發布了Zend Engine 1.0,這也意味著PHP 4.0的

誕生。2004年7月,Zend Engine 2.0發布,由此也將PHP帶入了PHP 5時代。PHP5包含了許

多重要的新特性,如增強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及

一系列對PHP性能的改進

Zend Engine是開源的、PHP腳本語言的解釋器,它最早是由以色列理工學院

(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人

名字的合稱。後來兩人聯合創立了Zend Technologies公司

Zend Engine 1.0於1999年隨PHP 4發布,由C語言開發且經過高度優化,並能

夠做為PHP的後端模塊使用。Zend Engine為PHP提供了內存和資源管理的功

能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成為一

種流行的語言方面發揮了重要作用

Zend Engine的出現將PHP代碼的處理過程分成了兩個階段:首先是分析PHP

代碼並將其轉換為稱作Zend opcode的二進制格式(類似Java的字節碼),並將

其存儲於內存中;第二階段是使用Zend Engine去執行這些轉換後的Opcode

Opcode是一種PHP腳本編譯後的中間語言,類似於Java的ByteCode,或

者.NET的MSL。PHP執行PHP腳本代碼一般會經過如下4個步驟(確切的來說,

應該是PHP的語言引擎Zend)

1、Scanning 詞法分析,將PHP代碼轉換為語言片段(Tokens)

2、Parsing 語義分析,將Tokens轉換成簡單而有意義的表達式

3、Compilation 將表達式編譯成Opocdes

4、Execution 順次執行Opcodes,每次一條,從而實現PHP腳本的功能

?

掃描-->分析-->編譯-->執行

php配置:

php:腳本語言解釋器

配置文件:

/etc/php.ini,/etc/php.d/*.ini

配置文件在php解釋器啟動時被讀取

對配置文件的修改生效方式:

modules:重啟httpd服務

FastCGI:重啟php-fpm服務

/etc/php.ini 配置文件格式:

[foo]:Section Header

directive = value

註釋符:較新的版本中,已經完全使用;進行註釋

# 純粹的註釋信息

; 用於註釋可啟用的directive

常用配置指令:

max_execution_time= 30 最長執行時間30s

memory_limit 128M 生產不夠,可調大

display_errors off 調試使用,不要打開,否則可能暴露重要信息

display_startup_errors off 建議關閉

post_max_size 8M 最大上傳數據大小,生產可能臨時要調大,比下面項要大

upload_max_filesize 2M 最大上傳文件,生產可能要調大

max_file_uploads = 20 同時上傳最多文件數

date.timezone =Asia/Shanghai 指定時區

short_open_tag=on 開啟短標簽,如<? phpinfo();?>

php.ini的核心配置選項文檔:

http://php.net/manual/zh/ini.core.php

php.ini配置選項列表

http://php.net/manual/zh/ini.list.php

php語言格式:

<?php

...php code

?>

php的加速器:

php的加速器:基於PHP的特殊擴展機制如opcode緩存擴展也可以將opcode

緩存於php的共享內存中,從而可以讓同一段代碼的後續重復執行時跳過編譯

階段以提高性能。這些加速器並非真正提高了opcode的運行速度,而僅是通過

分析opcode後並將它們重新排列以達到快速執行的目的

常見的php加速器有:

1、APC (Alternative PHP Cache)

遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於

PHP 5.4

項目地址http://pecl.php.net/package/APC

2、eAccelerator

源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,

目前encoder已經不在支持。項目地址 http://eaccelerator.net/

3、XCache

快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用於生產環境。項

目地址:http://xcache.lighttpd.net/,收錄EPEL源

4、Zend Optimizer和Zend Guard Loader

Zend Optimizer並非一個opcode加速器,它是由Zend Technologies為

PHP5.2及以前的版本提供的一個免費、閉源的PHP擴展,其能夠運行由Zend

Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專為

PHP5.3提供的類似於Zend Optimizer功能的擴展。項目地址

http://www.zend.com/en/products/guard/runtime-decoders

?

5、NuSphere PhpExpress

NuSphere的一款開源PHP加速器,它支持裝載通過NuSphere PHP Encoder

編碼的PHP程序文件,並能夠實現對常規PHP文件的執行加速。項目地址,

http://www.nusphere.com/products/phpexpress.htm

---------------------------------------------------------------------------

部署LAMP:

httpd:接收用戶的web請求;靜態資源則直接響應;動態資源為php腳本,

對此類資源的請求將交由php來運行

php:運行php程序

MariaDB:數據管理系統

http與php結合的方式

CGI

FastCGI:php-fpm

modules:php (將php編譯成為httpd的模塊,默認方式)

MPM:

prefork : libphp5.so

event, worker: libphp5-zts.so

centos7:

modules:httpd, php, php-mysql, mariadb-server

FastCGI:httpd,php-fpm,php-mysql,mariadb-server

centos6:

modules:httpd,php,php-mysql,mysql-server

默認不支持FastCGI

安裝LAMP:

CentOS 6:

yum install httpd php mysql-server php-mysql

service httpd start

service mysqld start

CentOS 7:

yum install httpd php php-mysql mariadb-server

systemctl start httpd.service

systemctl start mariadb.service

註意:要使用prefork模型

測試php是否正常連接:

vim /var/www/html/index.php

<?php

echo date("Y/m/d H:i:s");

phpinfo();

?>

php使用mysql擴展連接數據庫

只能連接mysql數據庫

註意:php7 已啟用此函數

1 執行 mysql_secure_installation 設置root 密碼

2 登錄mysql 添加授權賬號:

GRANT ALL ON *.* TO 'user1'@'192.168.65.%' IDENTIFIED BY 'centos';

3 編寫測試文件:

vim /var/www/html/mysql.php

<?php

#$conn = mysql_connect( 'servername','user','password');

$conn = mysql_connect( '127.0.0.1','user1','centos');

if($conn)

echo "OK";

else

echo "Failure";

echo mysql_error();

mysql_close();

?>

或者

<?php

$conn = mysql_connect( '192.168.65.132','user1','centos');

if($conn)

echo "OK";

else

echo "Failure";

echo mysql_error();

mysql_close();

?>

4 瀏覽器輸入 192.168.65.132/mysql.php 訪問測試

php使用mysqli擴展連接數據庫

只能連接mysql數據庫

vim /var/www/html/mysql2.php

<?php

$mysqli=new mysqli('192.168.65.155','user1','centos');

if(mysqli_connect_errno()){

echo "Failure";

$mysqli=null;

exit;

}

echo "OK";

$mysqli->close();

?>

php使用pdo擴展連接數據庫

可以連接主流各種數據庫

代碼1

vim /var/www/html/mysql3.php

<?php

$dsn='mysql:host=localhost;dbname=mysql';

$username='root';

$passwd='centos';

$dbh=new PDO($dsn,$username,$passwd);

var_dump($dbh);

?>

代碼2

vim /var/www/html/mysql4.php

<?php

try {

$user='root';

$pass='centos';

$dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass);

foreach($dbh->query('SELECT user,host from user') as $row) {

print_r($row);

}

$dbh = null;

} catch (PDOException $e) {

print "Error!: " . $e->getMessage() . "<br/>";

die();

}

?>

-----------------------------------------------------------------------------------

常見LAMP應用:

PhpMyAdmin:

是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MYSQL的數據庫管理工具

讓管理者可用web接口管理Mysql數據庫

WordPress:

是一種使用PHP語言開發的博客平臺,用戶可以在支持PHP和Mysql數據庫的服務器

上架設屬於自己的網站。也可把Wordpress當作一個內容管理系統(CMS)來使用

PHPWind:

2003年發布了PHPWind的前身版本ofstar,並發展稱為包含BBS,CMS,博客,SNS等

一系列程序的通用型建站軟件,於2008年加入阿裏巴巴集團

Crossday discuz! Board(簡稱discuz!):

是一套通用的社區論壇軟件系統。自2001年6月面世以來,是全球成熟度最高,覆蓋率

最大的論壇軟件系統之一。

2010年8月23日,與騰訊達成收購協議

ECShop:

是一款B2C獨立網店系統,適合企業及個人快速構建個性化網上商店。系統是基於

PHP語言及MYSQL數據庫架構開發的跨平臺開源程序。

2006年6月,ECShop推出第一個版本1.0

部署phpMyadmin:

1 安裝並啟動lamp

yum install httpd php mariadb-server mysql-server

yum install php-mbstring

systemctl start httpd mariadb

2 執行mysql_secure_installation,設置管理員密碼

3 下載phpmyadmin,註意查看支持的php和數據庫版本

下載地址:

4.0版本,PHP 5.2 and MySQL 5. Does

https://files.phpmyadmin.net/phpMyAdmin/4.0.10.20/phpMyAdmin-4.0.10.20-all-languages.zip

4.8版本,PHP 5.2 and MySQL 5. Does not support PHP 5.5 or newer

https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

4 解壓並復制到/var/www/html/目錄下

unzip phpMyAdmin-4.3.5-all-languages.zip

cp -a phpMyAdmin-4.3.5-all-languages /var/www/html/mysql

5 準備配置文件

cd /var/www/html/mysql

cp config.sample.inc.php config.inc.php

6 重啟服務

systemctl restart httpd

7 瀏覽器輸入 server-ip/mysql

使用root賬號登錄

部署wordpress:

1 下載軟件:

官網:https://cn.wordpress.org/

wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.zip

2 解壓並復制

unzip wordpress-4.9.4-zh_CN.zip

cp -a wordpress /var/www/html/blog

chown -R apache:apache /var/www/html/blog

3 準備數據庫和賬號

mysql>CREATE DATABASE wordpress

mysql>GRANT ALL ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY 'centos';

4 準備配置文件:

cp wp-config-sample.php wp-config.php

vim wp-config.php

數據庫登錄信息

5 重啟httpd

6 server-ip/blog 登錄執行初始化

部署discuz:

1 下載軟件:

http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip

2 解壓縮並復制的網站目錄下

unzip Discuz_X3.2_SC_UTF8.zip

cp upload/* /data/dz/ -a

chown -R apache:apache /data/dz

3 重啟httpd 並測試訪問

centos7 編譯php-xcache 加速訪問:

官網:http://xcache.lighttpd.net/wiki/ReleaseArchive

安裝方法:

rpm安裝,來自epel源

編譯安裝:

1 裝備環境,安裝開發包組development tools

yum install php-devel

2 下載並解壓縮 xcache-3.2.0.tar.bz2

cd xcache-3.2.0

3 phpize 生成編譯環境

4 ./configure --enable-xcache --with-php-config=/usr/bin/php-config

make && make install

5 cp xcache-3.2.0/xcache.ini /etc/php.d/

systemctl reload httpd

------------------------------------------------------------------------------

fastcgi:

centos6:

PHP-5.3.2之前:默認不支持fpm機制,需要自行打補丁並編譯安裝

httpd2.2:默認不支持fcgi協議,需要自行編譯此模塊

解決方案:編譯安裝http-2.4,php-5.3.3+

centos7:

httpd-2.4:rpm包默認編譯支持fcgi模塊

php-fpm包:專用於將php運行與fpm模式

fcgi服務配置文件:/etc/php-fpm.conf,/etc/php-fpm.d/*.conf

連接池:

pm = static|dynamic

static:固定數量的子進程;pm.max_children

dynamic:子進程數量以動態模式管理

pm.max_children 最大進程數

pm.start_servers 開啟啟動進程數

pm.min_spare_servers 最小空閑進程

pm.max_spare_servers 最大空閑進程

pm.max_requests = 500 最大處理請求數

daemonize = no //是否將程序運行在後臺

listen = 127.0.0.1:9000 //FPM 監聽地址

listen.backlog = -1 //等待隊列的長度 -1表示無限制

listen.allowed_clients = 127.0.0.1 //僅允許哪些主機訪問

php_value[session.save_handler] = files

php_value[session.save_path] = /var/lib/php/session

確保運行php-fpm 進程的用戶對session目錄有讀寫權限

mkdir /var/lib/php/session

chown apache.apache /var/lib/php/session

centos7,yum實現fastfcgi

同一臺主機:

1 安裝服務並啟動服務

yum install httpd mariadb-server php-fpm php-mysql

systemctl start httpd php-fpm mariadb

2 配置http

確認httpd服務器上必須啟用proxy_fcgi_module模塊,充當php客戶端

httpd -M |grep fcgi

cat /etc/httpd/conf.modules.d/00-proxy.conf

添加/etc/httpd/conf.d/fcgi.conf 配置文件,內容參照

DirectoryIndex index.php

? ProxyRequests Off

? ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1

3 登錄數據庫添加授權賬號

4 測試連接php和mysql連接書否正常

不同主機:

註意:httpd和php-fpm需為同一主機

如分別使用不同主機,即使使用相同目錄路徑,會導致圖片信息無識別

數據庫最好使用單獨主機,只需在應用程序配置地址,賬號信息即可

----------------------------------------------------------------------------

實現:同一服務器使用虛擬主機配置多應用:

php,module方式:

1 yum install httpd mariadb-server php php-mysql

yum install php-string 安裝phpmyadmin需要此包

註釋掉httpd主配置文件中 documentroot 項

添加配置文件

vim /etc/httpd/conf.d/vhosts.conf

<virtualhost *:80>

servername www.blog.com

documentroot "/data/blog/"

errorlog "/var/log/httpd/error_blog_log"

customlog "/var/log/httpd/access_blog_log" conbined

<directory "/data/blog">

options none

allowoverride none

require all granted

</directory>

alias /pma "/data/pma"

<directory "/data/pma">

options none

allowoverride none

require all granted

</directory>

</virtualhost>

<virtualhost *:80>

servername www.dz.com

documentroot "/data/dz"

errorlog "/var/log/httpd/error_dz_log"

customlog "/var/log/httpd/access_dz_log" conbined

<directory "/data/dz">

options none

allowoverride none

require all granted

</directory>

</virtualhost>

2 下載,解壓縮應用程序文件,分別復制到相應目錄下

cp -a wordpress/* /data/blog/

cp -a phpMyAdmin-4.3.5-all-languages/* /data/pma/

cp -a upload/* /data/dz/

其中dz為discuz解壓之後的一個目錄,註意只復制此目錄即可

chown -R apache:apache /data/blog /data/dz

3 修改配置文件:

cp /data/blog/wp-config-sample.php /data/blog/wp-config.php

vim /data/blog/wp-config.php

填寫數據庫登錄信息

cp /data/pma/config.sample.inc.php /data/pma/config.inc.php

vim /data/pma/config.inc.php

填寫blowfish 中的隨機字符

4 數據庫授權賬號

5 重啟服務 並做 頁面測試

fastcgi方式:

安裝程序包時 php換成 php-fpm

特別註意:

mkdir /var/lib/php/session

chown -R apache:apache /var/lib/php/session

否則,phpmyadmin無法使用

配置文件中:如下,

且之後步驟完全和modules方式一致

vim /etc/httpd/conf.d/fcgi.conf

directoryindex index.php

<virtualhost *:80>

servername www.blog.com

documentroot "/data/blog/"

errorlog "/var/log/httpd/error_blog_log"

customlog "/var/log/httpd/access_blog_log" conbined

proxyrequests off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/blog/$1

<directory "/data/blog">

options none

allowoverride none

require all granted

</directory>

</virtualhost>

<virtualhost *:80>

servername www.pma.com

documentroot "/data/pma"

errorlog "/var/log/httpd/error_pma_log"

customlog "/var/log/httpd/access_pma_log" combined

proxyrequests off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/pma/$1

<directory "/data/pma">

options none

allowoverride none

require all granted

</directory>

</virtualhost>

<virtualhost *:80>

servername www.dz.com

documentroot "/data/dz"

errorlog "/var/log/httpd/error_dz_log"

customlog "/var/log/httpd/access_dz_log" conbined

proxyrequests off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/dz/$1

<directory "/data/dz">

options none

allowoverride none

require all granted

</directory>

</virtualhost>

------------------------------------------------------------------------------------

編譯安裝LAMP:

在centos7編譯安裝LAMP:

安裝程序順序

mariadb:通用二進制格式:mariadb-10.2.15

下載地址:

需提前準備好二進制安裝包

httpd: 編譯安裝,httpd-2.4.33

下載地址:

官網:http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2

搜狐:http://mirrors.sohu.com/apache/httpd-2.4.33.tar.bz2

需要更新apr,apr-util

下載地址:

APR: http://mirrors.hust.edu.cn/apache//apr/apr-1.6.3.tar.gz

APR-UTIL: http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

php7:編譯安裝,php-7.2.7

下載地址:http://mirrors.sohu.com/php/php-7.2.7.tar.bz2

phpmyadmin:安裝phpmyadmin4.8.2

下載地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.zip

xcache:php7 以內置加速功能,不需要安裝xcache

對比測試:使用yum一件安裝腳本安裝lamp+wordpress

使用ab -c 10 -n 100 http://192.168.65.132/

測試結果Requests per second: 5.08 [#/sec] (mean)

測試多次大概5個左右 phpmuadmin 大約26個左右

yum安裝上php-xcache之後測試結果為:還是5個 26個

編譯安裝流程:

1 準備開發環境

yum groupinstall "development tools" -y

yum install pcre-devel openssl-devel expat-devel -y

2 二進制安裝mariadb-10.2.15

##如果沒有mysql賬號,需先創建

groupadd -r -g 306 mysql

useradd -r -u 306 -g 306 -d /data/mysqldb

tar -xf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local/

cd /usr/local/

ln -sv mariadb-10.2.15-linux-x86_64 mysql

cd mysql

chown -R mysql:mysql ./*

mkdir /data/mysqldb -p

chown -R mysql:mysql /data/mysqldb

mkdir /etc/mysql

cp support-files/my-huge.cnf /etc/mysql/my.cnf

修改配置文件,如果要寫成腳本,此項需註意,使用sed

vim /etc/mysql/my.cnf

[mysqld]

datadir = /data/mysqldb

innodb_file_per_table = on

skip_name_resolve = on

./scripts/mysql_install_db --datadir=/data/mysqldb --user=mysql

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

chkconfig --add mysqld

chkconfig mysqld on

service mysqld start

3 源碼編譯httpd-2.4

cd

wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2

wget http://mirrors.hust.edu.cn/apache//apr/apr-1.6.3.tar.gz

wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz

tar -xf httpd-2.4.33.tar.bz2

tar -xf apr-1.6.3.tar.gz

tar -xf apr-util-1.6.1.tar.gz

cp -a apr-1.6.3 httpd-2.4.33/srclib/apr

cp -a apr-util-1.6.1 httpd-2.4.33/srclib/apr-util

cd httpd-2.4.33/

./configure --prefix=/app/httpd24 \

--sysconfdir=/etc/httpd24 \

--enable-so --enable-ssl --enable-cgi \

--enable-rewrite --with-zlib --with-pcre \

--with-includedapr --enable-modules=most \

--enable-mpms-shared=all --with-mpm=prefork

make -j 4 && make install

cd /app/httpd24/

echo 'PATH=/app/httpd24/bin/:$PATH' > /etc/profile.d/httpd24.sh

. /etc/profile.d/httpd24.sh

修改配置文件中的user和group

sed -i '/^User/s/.*/User apache/' /etc/httpd24/httpd.conf

sed -i '/^Group/s/.*/Group apache/' /etc/httpd24/httpd.conf

重啟服務

apachectl start

4 源碼編譯安裝PHP:

cd

yum install libxml2-devel bzip2-devel libmcrypt-devel -y

wget http://mirrors.sohu.com/php/php-7.2.7.tar.bz2

模塊方式:

tar -xf php-7.2.7.tar.bz2

cd php-7.2.7/

參考編譯選項:php5.6

./configure --prefix=/app/php \

--with-mysql=/usr/local/mysql \

--with-openssl \

--with-mysqli=/usr/local/mysql/bin/mysql_config \

--enable-mbstring --with-png-dir \

--with-jpeg-dir --with-freetype-dir \

--with-zlib --with-libxml-dir=/usr \

--enable-xml --enable-sockets \

--with-apxs2=/appl/httpd24/bin/apxs \

--with-mcrypt --with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--with-bz2

編譯選項:php7.0+

./configure --prefix=/app/php \

--enable-mysqlnd \

--with-mysqli=mysqlnd \

--with-openssl \

--with-pdo-mysql=mysqlnd \

--enable-mbstring \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \

--with-apxs2=/app/httpd24/bin/apxs \

--with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--disable-fileinfo \

--enable-maintainer-zts

註意: php-7.0以上版本使用--enable-mysqlnd --with-mysqli=mysqlnd ,

原--with-mysql不再支持

--enable-maintainer-zts

如果http編譯成event或者worker,必須加上此項

make -j 4 && make install

準備配置文件:

cp php.ini-production /etc/php.ini

編譯apache配置文件httpd.conf,使apache支持php

vim /etc/httpd24/httpd.conf

添加2行:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

定位至: DirectoryIndex index.html

修改為: DirectoryIndex index.php index.html

重復服務:

apachectl restart

5 源碼編譯安裝PHP: fpm方式

tar -xf php-7.2.7.tar.bz2

cd php-7.2.7/

./configure --prefix=/app/php \

--enable-mysqlnd \

--with-mysqli=mysqlnd \

--with-openssl \

--with-pdo-mysql=mysqlnd \

--enable-mbstring \

--with-freetype-dir \

--with-jpeg-dir \

--with-png-dir \

--with-zlib \

--with-libxml-dir=/usr \

--enable-xml \

--enable-sockets \

--enable-fpm \

--with-config-file-path=/etc \

--with-config-file-scan-dir=/etc/php.d \

--enable-maintainer-zts \

--disable-fileinfo

make -j 4 && make install

安裝後配置:

cp php.ini-production /etc/php.ini

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

chmod +x /etc/init.d/php-fpm

chkconfig --add php-fpm

chkconfig php-fpm on

cd /app/php/etc

cp php-fpm.conf.default php-fpm.conf

cp php-fpm.d/www.conf.default php-fpm.d/www.conf

vim php-fpm.d/www.conf

user = apache

group = apache

修改php-fpm程序的用戶和組,可選項,不修改也可以

rename ini so /etc/php.d/*

修改/etc/php.d/*.ini ===> /etc/php.d/*.so

php7.2.7需要,否則啟動會有一堆報錯

service php-fpm start

配置httpd.conf

vim /etc/http24/httpd.conf

取消下面兩行的註釋:

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

定位至:DirectoryIndex index.html

修改為:DirectoryIndex index.php index.html

添加下面四行:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

ProxyRequests Off

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/httpd24/htdocs/$1

重啟服務:

apachectl restart

編譯過程報錯記錄:

1 make[1]: Warning: File `/root/php-7.2.7/ext/date/php_date.c' has

modification time 1.9e+06 s in the future

問題原因:

系統時間設置不正確,導致安裝時間是系統時間未來的時間

解決方案:

修改正確系統時間

2 PHP Startup: Unable to load dynamic library 'curl.so' ....

解決方案:

rename ini so /etc/php.d/*

LAMP 一鍵安裝腳本:

1 yum安裝module方式

2 yum安裝fpm方式

3 編譯安裝方式


第24章,實現LAMP架構