本章blog主要介紹了[LAMP] Linux (Centos)LAMP環境搭建,LAMP源碼安裝及LAMP架構原理詳解,並分別部署php與apache不一樣組合方式的LAMP案例。
php
LAMP Server html
LAMP簡介mysql
LAMP網站框架是目前國際上流行的Web服務架構,該框架包括GNU / Linux 操做系統,Apache HTTP服務器,MySQL 類關係型數據庫(RDBMS)以及PHP編程語言。全部組成產品均屬於開源類軟件 ,自己都是各自獨立的程序,可是由於常被放在一塊兒使用,擁有了愈來愈高的兼容度,使其更適用於構建動態網站及開發Web應用程序, 現已成爲國際流行的框架架構。linux
目前不少流行的商業應用都是採起這個架構,和Java/J2EE架構相比,LAMP具備Web資源豐富、輕量、快速開發等特色,與微軟的.NET架構相比,LAMP具備通用、跨平臺、高性能、低價格的優點,所以LAMP不管是性能、質量仍是價格都是企業搭建網站的首選平臺。nginx
LAMP組件c++
GNU / Linux 操做系統: web
Linux是一種相似Unix的計算機操做系統,Linux操做系統有不少個不一樣的發行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。sql
Apache HTTP服務器:數據庫
LAMP的HTTP服務器的角色除了由Apache提供外,還包括其餘如nginx等的Web服務器 ;其中,Apache負責傳遞PHP及cgi等動態語言,Nginx提供負載均衡、反向解析及容錯功能,彼此配合使用,成爲HTTP服務器的配置首選模式。apache
MySQL 類關係型數據庫(RDBMS):
MySQL做爲LAMP的關係數據庫管理系統(RDBMS)的原始角色已經由其餘RDBMS(如MariaDB)甚至NoSQL數據庫(如MongoDB)逐步取代。MariaDB由MySQL的創始人Michael Widenius主導開發,其屬於MySQL的一個分支,主要由開源社區在維護,採用GPL受權許可,且MariaDB徹底兼容MySQL;MongoDB是一個Web規模的開源NoSQL數據庫 。
php編程語言:
PHP做爲LAMP的應用程序編程語言的原始角色,也逐步由其餘語言(如Perl和Python)共同執行。PHP是一種服務器端腳本語言,專爲Web開發而設計。PHP代碼由web服務器提供的PHP模塊編譯,支持將PHP命令直接嵌入到HTML源文檔中去執行,執行效率比徹底生成HTML標記的CGI要高許多;Perl是一系列高級,通用,解釋的動態編程語言;Python是一中面向對象的的通用型高級編程語言,Python支持多種編程範例,包括面向對象,命令式,功能和過程範式。
緩存或加速器:
Apache提供了本身的緩存模塊,也可使用外加的Squid模塊進行緩存,這兩種方式都可以有效的提升Apache的訪問響應能力。PHP的加速可以使用xcache加速器,優化和緩存php動態內容,提高了PHP腳本的緩存性能。Memcached是一個分佈式的內存對象緩存系統,一般用於動態Web應用以減輕數據庫負載。
LAMP架構原理
客戶端發送http request 請求 ,服務器(Apache)接受web請求;
Apache判斷客戶端請求的資源是否爲靜態請求。如果靜態請求,則Apache直接將客戶端請求的靜態資源(.html, .htm .shtml等文件),經過Http response的形式傳送給客戶端;
若爲php動態請求,則經過CGI協議將客戶端的php請求傳輸給PHP程序,而後由php程序調用php解析器執行php請求。
PHP在執行php請求時判斷是否會依賴mysql數據庫。若不依賴mysql數據庫,則由php解析器直接執行php相關腳本,將解析後的腳本再次經過CGI協議返傳送給Apache.服務器,再執行「靜態請求」的流程;
若依賴mysql數據庫,則php程序經過php-mysql 驅動與mysql進行關聯 ,獲取相關數據 ,而後將其返還給php解釋器 ,再次執行「不依賴mysql數據庫」的流程。
apache與php組合方式
Module機制:php直接以httpd的模塊擴展的方式運行,php做爲httpd功能的一部分。啓動httpd進程時 ,亦開啓了php功能。其中prefork模式依賴libphp5.so庫 ,worker、event模式依賴libphp5-zts.so庫
CGI機制:php工做在獨立的進程,當須要解析php請求時,由httpd喚醒php進程。因多個php請求,會啓動多個php進程,須要耗費資源,總體性能不如module機制
Fast-CGI機制:生成php-fpm服務 ,由服務php-fpm管理php進程。基於套接字與apache聯繫 ,與apache work機制相似 ,有父進程,子進程,空閒進程等 ,大大提升了php處理能力。
LAMP服務器(server)實驗搭建
根據apache與php組合的不一樣方式,下面將演示LAMP編譯安裝實驗:實驗1、 php 以module 模式訪問 ,實驗二 、配置apache 與fpm方式 的php 。
系統:Centos 6.6
軟件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36
編譯環境:安裝LAMP相關依賴環境,包括「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables 功能
實驗目的:編譯安裝LAMP,經過不一樣的方式,分別實現php 以 modeule 方式訪問和 以Fast-CGI機制下運行 。
LAMP編譯安裝,配置php 以 module 模式訪問
1、配置編譯環境 ,安裝「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables
[root@VM ~]# yum groupinstall "Development tools" -y # 安裝包組開發工具 [root@VM ~]# yum groupinstall "Server Platform Development" -y # 安裝包組服務開發環境 [root@VM ~]# vi /etc/selinux/config # 修改配置文件,關閉selinux功能 SELINUX=disabled # 設定爲disabled #SELINUXTYPE=targeted # 註釋該項,行首添加# [root@VM ~]# chkconfig iptables off # 禁止開機自啓動iptables功能 [root@VM ~]# chkconfig ip6tables off [root@VM ~]# service iptables stop # 中止iptables 功能 [root@VM ~]# service ip6tables stop
2、編譯安裝Apache
編譯安裝apr(apr-1.6.3)
下載地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz
[root@VM ~]# tar xf apr-1.6.3.tar.gz [root@VM ~]# cd apr-1.6.3 [root@VM apr-1.6.3]# ./configure --prefix=/usr/local/apr [root@VM apr-1.6.3]# make && make install
編譯安裝apr-util(apr-util-1.6.1)
下載地址: http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz
[root@VM ~]# tar xf apr-util-1.6.1.tar.gz [root@VM ~]# cd apr-util-1.6.1 [root@VM apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ [root@VM apr-util-1.6.1]# make && make install
編譯安裝httpd(httpd-2.4.34)
下載地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz
[root@VM ~]# yum install gcc gcc-c++ pcre pcre-devel # 安裝依賴環境 [root@VM ~]# cd httpd-2.4.34 # 編譯安裝httpd [root@VM httpd-2.4.34]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable--ssl --enable-cgi --enable-rewrite --with-zlib\ --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modeles=most --enable-mpms-shared=all --with-mpm=event [root@VM httpd-2.4.34]# make && make install [root@VM bin]# vi /etc/profile.d/http.sh # 配置環境變量 export PATH=/usr/local/apache/bin:$PATH [root@VM bin]# . /etc/profile.d/http.sh # 使能環境變量 [root@VM apache]# ln -sv /usr/local/apache/include/ /usr/include/httpd # 配置httpd include頭文件 `/usr/include/httpd' -> `/usr/local/apache/include/' [root@VM apache]# vi /etc/man.config # 配置httpd man幫助文件 MANPATH /usr/local/apache/man
參數註釋: # ./configure --help :查看相關命令幫助,查看相關支持的選項參數及功能 --prefix=PREFIX :指定默認安裝目錄 --sbindir=DIR:指定可執行文件安裝目錄 --enable-so : 啓用DSO動態加載模塊支持,須要什麼功能模塊可動態加載 --enable--ssl :SSL/TLS support (mod_ssl) --enable-cgi :支持CGI腳本功能 --enable-rewrite : 啓用網頁地址重寫功能,實現僞靜態 --with-zlib=DIR:安裝zlib庫 --with-pcre=DIR :使用擴展的pcre lib庫 --with-apr=DIR :指向apr安裝路徑 --with-apr-util=DIR :指向apr-util 安裝路徑 --enable-modules=most :指定安裝DSO動態庫用來通訊 --with-mpm=prefork|worker|event :指定服務器默認支持的一種MPM模塊 --enable-mpms-shared=all :當前平臺選擇MPM加載動態模塊並以DSO動態庫方式進行建立 configure的各項參數及功能介紹,可參照官方文檔 https://httpd.apache.org/docs/2.4/en/programs/configure.html
啓動Apache服務並驗證,修改apache的配置文件並設置PidFile路徑(默認在/usr/local/apache/logs/httpd.pid)
[root@VM ~]# vi /etc/httpd/httpd.conf Pidfile "/var/run/httpd/httpd.pid" # 添加該項,爲Pidfile指明httpd.pid路徑 [root@VM ~]# apachectl start # 啓動apache服務 [root@VM ~]# ss -tunl | grep 80 tcp LISTEN 0 128 :::80 :::* [root@VM ~]# curl # 驗證apache服務 <html><body><h1>It works!</h1></body></html>
3、編譯安裝Mysql
建議在硬raid中建立lvm,使用獨立的lvm磁盤做爲mysql 數據存儲目錄 ,便於備份mysql數據
[root@VM ~]# fdisk /dev/sda # 磁盤建立分區/dev/sda4 ,並調整磁盤格式爲8e(LVM) Command (m for help): n # 建立分區 Command action e extended p primary partition (1-4) Command (m for help): p # 指定主分區 Selected partition 4 First cylinder (10976-16709, default 10976): Using default value 10976 Last cylinder, +cylinders or +size{K,M,G} (10976-16709, default 16709): Using default value 16709 Command (m for help): t # 調整分區類型 Partition number (1-4): 4 Hex code (type L to list codes): 8e Changed system type of partition 4 to 8e (Linux LVM) Command (m for help): p # 顯示磁盤分區,驗證/dev/sda4爲Linux LVM分區類型 Device Boot Start End Blocks Id System /dev/sda1 * 1 256 2048000 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 256 10454 81920000 8e Linux LVM /dev/sda3 10454 10976 4194304 82 Linux swap / Solaris /dev/sda4 10976 16709 46051714+ 8e Linux LVM Command (m for help): w # 保存分區退出 The partition table has been altered! [root@VM ~]# partx -a /dev/sda # 內核重讀磁盤分區 [root@VM ~]# kpartx -af /dev/sda [root@VM ~]# cat /proc/partitions # 驗證內核是否加載 /dev/sda4分區 major minor #blocks name 8 0 134217728 sda 8 1 2048000 sda1 8 2 81920000 sda2 8 3 4194304 sda3 8 4 46051714 sda4 [root@VM ~]# mke2fs -t ext4 /dev/sda4 # 格式化分區/dev/sda4 [root@VM ~]# pvcreate /dev/sda4 # 建立pv Physical volume "/dev/sda4" successfully created [root@VM ~]# pvs # 顯示pv PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a--u 78.12g 2.92g /dev/sda4 lvm2 ---- 43.92g 43.92g [root@VM ~]# vgextend vg0 /dev/sda4 # 擴展vg0 Volume group "vg0" successfully extended [root@VM ~]# vgs # 顯示vg VG #PV #LV #SN Attr VSize VFree vg0 2 4 0 wz--n- 122.03g 46.84g [root@VM ~]# lvcreate -n data -L 20G vg0 # 建立lvm分區data Logical volume "data" created. [root@VM ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data vg0 -wi-a----- 20.00g [root@VM ~]# mke2fs -t ext4 /dev/mapper/vg0-data # 對分區建立文件系統 [root@VM ~]# vi /etc/fstab # 配置開機自動掛載/dev/mapper/vg0-data 分區 /dev/mapper/vg0-data /data ext4 defaults 0 0 [root@VM ~]# mount -a # 掛載全部分區 [root@VM ~]# mount # 驗證分區掛載 /dev/mapper/vg0-data on /data type ext4 (rw)
編譯安裝mysql
下載地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz
[root@VM ~]# tar xf mysql-5.5.61.tar.gz # 解壓mysql源碼包 [root@VM ~]# useradd -s /sbin/nologin -r mysql # 添加系統用戶mysql [root@VM ~]# id mysql uid=498(mysql) gid=498(mysql) groups=498(mysql) [root@VM ~]# cd /data/ # 建立mysql數據的目錄/data/sqldata ,調整目錄權限 [root@VM data]# mkdir sqldata [root@VM data]# chown root:mysql sqldata/ [root@VM ~]# yum install ncurses-devel bison bison-devel # 配置Epel yum源,安裝mysql依賴環境 [root@VM ~]# cd mysql-5.5.61 # 編譯安裝mysql [root@VM mysql-5.5.61]# cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/sqldata \ -DSYSCONFDIR=/etc \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_DEBUG=0 [root@VM mysql-5.5.61]# make && make install [root@VM mysql]# vi /etc/profile.d/mysql.sh # 配置mysql環境變量 export PATH=/usr/local/mysql/bin:$PATH [root@VM mysql]# . /etc/profile.d/mysql.sh # 使能環境變量 [root@VM mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql # 配置mysql include頭文件 `/usr/include/mysql' -> `/usr/local/mysql/include/' [root@VM mysql]# vi /etc/man.config # 配置mysql命令幫助文件 MANPATH /usr/local/mysql/man [root@VM mysql]# vi /etc/ld.so.conf.d/mysql.conf # 配置mysql lib庫,添加以下項 /usr/local/mysql/lib [root@VM lib]# ldconfig -v | grep mysql # 驗證lib庫 /usr/local/mysql/lib: libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0 /usr/lib64/mysql: libmysqlclient_r.so.16 -> libmysqlclient_r.so.16.0.0 libmysqlclient.so.16 -> libmysqlclient.so.16.0.0
#參數註釋 # cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql # MySQL安裝的根目錄 -DMYSQL_DATADIR=/data/sqldata # MySQL數據庫文件存放目錄 -DSYSCONFDIR=/etc # MySQL配置文件所在目錄 -DWITH_MYISAM_STORAGE_ENGINE=1 # MySQL的數據庫引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1 # MySQL的數據庫引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 # MySQL的數據庫引擎 -DWITH_MEMORY_STORAGE_ENGINE=1 # MySQL的數據庫引擎 -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock # MySQL的sock目錄 -DMYSQL_TCP_PORT=3306 # MySQL的監聽端口 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all # 使MySQL支持全部的擴展字符 -DDEFAULT_CHARSET=utf8 # 設置MySQL的默認字符集爲utf8 -DDEFAULT_COLLATION=utf8_general_ci #設置MySQL的默認字符校對 -DWITH_DEBUG=0 # 禁用調試模式 編譯的參數能夠參考 。
mysql初始化,啓動服務
[root@VM mysql]# chown -R root:mysql /usr/local/mysql # 設置/usr/local/mysql 目錄權限 [root@VM mysql]# ./scripts/mysql_install_db --datadir=/data/sqldata/ --user=mysql # 初始化mysql腳本 Installing MySQL system tables... 180819 14:21:16 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180819 14:21:16 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65052 ... OK Filling help tables... 180819 14:21:17 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180819 14:21:17 [Note] ./bin/mysqld (mysqld 5.5.61) starting as process 65059 ... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system [root@VM mysql]# ln -sv /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 啓動文件 `/etc/init.d/mysqld' -> `/usr/local/mysql/support-files/mysql.server' [root@VM run]# vi /etc/my.cnf # 調整mysql 啓動配置文件 [mysqld] datadir=/data/sqldata # 指定data目錄 socket=/var/run/mysql/mysql.sock # 指定sock目錄 user=mysql # 指定啓動用戶mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # 指定pid目錄 [root@VM run]# mkdir /var/run/mysql # 建立/var/run/mysql 目錄,提供pid和sock存放目錄 [root@VM run]# chown -R mysql.mysql /var/run/mysql # 調整目錄屬性 [root@VM run]# chkconfig --add mysqld # 加入mysqld啓動服務 [root@VM run]# chkconfig mysqld on [root@VM run]# service mysqld start # 啓動mysqld服務 Starting MySQL SUCCESS! [root@VM run]# ss -tunl | grep 3306 tcp LISTEN 0 50 *:3306 *:*
對mysql數據庫進行管理,刪除匿名用戶,建立密碼 ,刪除test數據庫 等操做
[root@VM mysql]# mysql #登陸mysql 數據庫 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.61 Source distribution mysql> select version(); +-----------+ | version() | +-----------+ | 5.5.61 | +-----------+ 1 row in set (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> drop database test; Query OK, 0 rows affected (0.03 sec) mysql> show tables; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | user | +---------------------------+ mysql> select user,host,password from user; +------+-----------+----------+ | user | host | password | +------+-----------+----------+ | root | localhost | | | root | vm | | | root | 127.0.0.1 | | | root | ::1 | | | | localhost | | | | vm | | +------+-----------+----------+ 6 rows in set (0.00 sec) mysql> drop user root@'::1'; # 清理匿名用戶 Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> drop user ''@'vm'; Query OK, 0 rows affected (0.00 sec) mysql> UPDATE user SET password=PASSWORD('Hello123abc.com') WHERE user='root'; # 定義root用戶密碼 Query OK, 4 rows affected (0.01 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
對mysql 建立用戶及密碼、主機配置文件,能夠不使用密碼進行登陸
[root@VM mysql]# vi /root/.my.cnf # 添加以下代碼,實現無需密碼進行登陸 [mysql] user = root host = localhost password = Hello123abc.com 注:在啓動MySQL服務時,會按照必定次序搜索my.cnf。 尋找順序:/etc/my.cnf -->$MYSQL_Base/my.cnf --> --defaults-extra-file=/path/to/some_my.cnf -->.my.cnf
4、編譯安裝PHP
編譯安裝php-5.6.36
下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt # 配置Epel yum源,安裝依賴環境 [root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./configure --prefix=/usr/local/php \ --with-mysql=/usr/local/mysql --with-openssl \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --enable-mbstring --with-freetype-dir \ --with-jpeg-dir --with-png-dir \ --with-zlib --with-bz2 \ --with-mcrypt --with-libxml-dir=/usr \ --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs \ --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d \ --enable-maintainer-zts [root@VM php-5.6.36]# make && make install [root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 把php提供配置文件 [root@VM ~]# vi /etc/profile.d/php.sh #添加環境變量 export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 頭文件 `/usr/include/php' -> `/usr/local/php/include/'
參數註釋; --prefix=/usr/local/php # 指定php安裝的路徑 --with-mysql=/usr/local/mysql # 指定mysql的安裝目錄 --with-mysqli=/usr/local/mysql/bin/mysql_config # 可讓mysql與php結合的接口 --with-openssl #支持ssl功能 --enable-mbstring # 指定能夠支持中文語言 --with-freetype-dir # 加載freetype的頭文件,能夠支持不一樣字體 --with-jpeg-dir --with-png-dir # 支持jpep格式圖片 ,支持pnp格式圖片 --with-zlib # 支持壓縮庫 --with-libxml-dir=/usr # 指定xml的庫路徑 --enable-sockets # 支持套接字的通訊功能 --with-mcrypt # 支持額外的加密功能的庫 --with-config-file-path=/etc # 指定php配置文件的路徑(/etc/php.ini) --with-config-file-scan-dir=/etc/php.d # 支持php文件的附件配置文件(/etc/php.d/*.ini) --with-bz2 #支持bz2的壓縮庫 --enable-maintainer-zts # 此選項是否安裝取決於你的Apache工做的mpm模式,
配置apache 以支持php
[root@VM ~]# vi /etc/httpd/httpd.conf #配置httpd 集成php <1> 確認php模塊啓動 LoadModule php5_module modules/libphp5.so <2>添加以下二行 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html 修改成: DirectoryIndex index.php index.html [root@VM ~]# apachectl stop # 重啓httpd服務 [root@VM ~]# apachectl start
驗證php功能與apache ,php與mysql 鏈接
[root@VM ~]# vi /usr/local/apache/htdocs/index.php # 測試apache 與 php 鏈接狀態腳本 <?php phpinfo(); ?> [root@VM ~]# vi /usr/local/apache/htdocs/mysql.php # 測試php 與 mysql 鏈接狀態腳本 <?php $link = mysql_connect('localhost','root','Hello123abc.com'); if ($link) echo "sucessful."; else echo "failure."; mysql_close(); ?>
5、安裝php加速器xcache
安裝xcache
下載地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
[root@VM ~]# tar xf xcache-3.2.0.tar.gz [root@VM ~]# cd xcache-3.2.0 [root@VM xcache-3.2.0]# phpize # 報錯,經過yum install autoconfig 解決。 Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. [root@VM xcache-3.2.0]# phpize # 編譯php模塊 Configuring for: PHP Api Version: 20131106 Zend Module Api No: 20131226 Zend Extension Api No: 220131226 [root@VM xcache-3.2.0]# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config # 編譯安裝 [root@VM xcache-3.2.0]# make && make install # 安裝,記錄生成的文件路徑 Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20131226/ [root@VM ~]# cp xcache.ini /etc/php.d/ [root@VM ~]# vi /etc/php.d/xcache.ini extension = /usr/local/php/lib/php/extensions/no-debug-zts-20131226/xcache.so #修改該配置,變爲絕對路徑 [root@VM ~]# apachectl stop # 重啓httpd服務 [root@VM ~]# apachectl start
驗證xcache 安裝
6、安裝phpMyAdmin-4.8.2 ,管理mysql
安裝phpMyAdmin-4.8.2 ,支持php5.5- php 7.2 ,mysql-5.5 以上
下載地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz
[root@VM ~]# tar xf phpMyAdmin-4.8.2-all-languages.tar.xz [root@VM ~]# mv phpMyAdmin-4.8.2-all-languages /usr/local/apache/htdocs/pmyadmin
phpMyadmin 登陸http://192.168.4.160/pmyadmin 驗證
錯誤故障解決
1)配置文件如今須要一個短密碼: 解決辦法:設定 config.default.php 文件的108行 $cfg[‘blowfish_secret’] 參數,參數字符串長度必須在32位以上。 [root@VM pmyadmin]# vi libraries/config.default.php # 在phpMyAdmin目錄下libraries文件下的config.default.php $cfg['blowfish_secret'] = 'Itwish@itwish.cn@blog.51cto.com/itwish'; 2)$cfg['TempDir'] (./tmp/) 讀取失敗且不能創建緩存, phpMyAdmin運行速度將受影響. 解決辦法:手動在phpmyadmin的根目錄創建tmp文件,並賦予777權限 [root@VM pmyadmin]# mkdir -m 777 tmp
7、壓力測試
ab工具測試
[root@VM pmyadmin]# ulimit -n 3000 [root@VM pmyadmin]# ab -c 200 -n 2000 http://192.168.4.160/pmyadmin/index.php This is ApacheBench, Version 2.3 <$Revision: 1826891 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.4.160 (be patient) Server Software: Apache/2.4.34 Server Hostname: 192.168.4.160 Server Port: 80 Document Path: /pmyadmin/index.php Document Length: 14114 bytes Concurrency Level: 200 Time taken for tests: 50.732 seconds Complete requests: 68 Failed requests: 50 (Connect: 0, Receive: 0, Length: 50, Exceptions: 0) Total transferred: 1237144 bytes HTML transferred: 1115484 bytes Requests per second: 1.34 [#/sec] (mean) Time per request: 149211.594 [ms] (mean) Time per request: 746.058 [ms] (mean, across all concurrent requests) Transfer rate: 23.81 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 42 10.0 45 48 Processing: 303 3041 2912.9 2091 15081 Waiting: 92 2496 2183.3 1949 13240 Total: 303 3083 2914.7 2120 15127 Percentage of the requests served within a certain time (ms) 50% 2120 66% 2458 75% 3025 80% 3069 90% 5107 95% 9875 98% 13559 99% 15127 100% 15127 (longest request) 結果證明 ,安裝xcache 壓力測試 ,時間間隔明顯減小
LAMP編譯安裝,實現php-fpm模式
1、配置編譯環境 ,安裝「Server PlatForm Development」, 「Development tools」,關閉selinux 和 iptables ,與上文配置相同
2、編譯安裝Apache ,與上文配置相同
3、編譯安裝Mysql,與上文配置相同
4、編譯安裝PHP 支持Fast-CGI
編譯安裝php-5.6.36
下載地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
[root@VM ~]# yum -y install libxml2-devel openssl-devel openssl bzip2-devel libmcrypt libmcrypt-devel mcrypt # 配置Epel yum源,安裝依賴環境 [root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# ./configure --prefix=/usr/local/php \ --with-mysql=/usr/local/mysql --with-openssl \ --with-mysqli=/usr/local/mysql/bin/mysql_config \ --enable-mbstring --with-freetype-dir \ --with-jpeg-dir --with-png-dir \ --with-zlib --with-bz2 \ --with-mcrypt --with-libxml-dir=/usr \ --enable-sockets --enable-fpm \ --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d [root@VM php-5.6.36]# make && make install [root@VM ~]# vi /etc/profile.d/php.sh #添加環境變量 export PATH=/usr/local/php/bin:$PATH [root@VM ~]# ln -sv /usr/local/php/include/ /usr/include/php # 添加php 頭文件 `/usr/include/php' -> `/usr/local/php/include/'
# 說明,與Module方式相比,編譯安裝Fast-CGI模式時 去掉了--enable-maintainer-zts,再也不將php做爲httpd的模塊。 此外將--with-apxs2=/usr/local/apache/bin/apxs改成--enable-fpm
配置並啓動 php-fpm 服務
[root@VM ~]# cd php-5.6.36 [root@VM php-5.6.36]# cp php.ini-production /etc/php.ini # 爲php提供配置文件 [root@VM php-5.6.36]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 配置php-fpm啓動腳本 [root@VM php-5.6.36]# chmod +x /etc/init.d/php-fpm # 分配腳本執行權限 [root@VM php-5.6.36]# chkconfig --add php-fpm [root@VM php-5.6.36]# chkconfig php-fpm on [root@VM php-5.6.36]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf #準備腳本的配置文件 [root@VM php-5.6.36]# vi /usr/local/php/etc/php-fpm.conf # 配置php-fpm 相關參數 pid = /var/run/php-fpm.pid # 默認路徑爲/usr/local/php/var/run/php-fpm.pid ,指定pid文件 pm.max_children = 5 # 服務啓動時的子進程數 pm.start_servers = 2 # 開啓啓動的進程數 pm.min_spare_servers = 1 # 最少空閒子進程數 pm.max_spare_servers = 3 # 最大空閒子進程數 pm.max_requests = 500 # 最大客戶端請求數 [root@VM php-5.6.36]# service php-fpm start [root@VM ~]# ss -tunl | grep 9000 tcp LISTEN 0 128 127.0.0.1:9000 *:*
配置apache 以支持fast-CGI
[root@VM ~]# vi /etc/httpd/httpd.conf #配置httpd 集成php <1> 確認php模塊啓動 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so <2> 配置apache可識別php文件 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps <3> 定位至DirectoryIndex index.html 修改成: DirectoryIndex index.php index.html <4> 配置httpd支持fast-CGI,在主機下定義,而非目錄 DocumentRoot "/var/www/html" ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 <5> 配置fast-CGI支持虛擬主機,在主機下定義,而非目錄 <VirtualHost *:80> ProxyRequests off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 </VirtualHost> [root@VM ~]# apachectl stop # 重啓httpd服務 [root@VM ~]# apachectl start
驗證php功能與apache ,php與mysql 鏈接
[root@VM ~]# vi /usr/local/apache/htdocs/index.php # 測試apache 與 php 鏈接狀態腳本 <?php $link = mysql_connect('localhost','root','Hello123abc.com'); if ($link) echo "sucessful."; else echo "failure."; mysql_close(); phpinfo(); ?>
5、安裝php加速器xcache,與上文配置相同
6、安裝phpMyAdmin-4.8.2 ,管理mysql ,與上文配置相同
7、壓力測試 ,與上文配置相同
至此,完成LAMP編譯安裝實驗,分別實現 php 以module 模式訪問 和 配置apache 與fpm方式 的php 。