1. 程式人生 > >LNMP之安裝獨立的php服務

LNMP之安裝獨立的php服務

oss ado 接受 文件內容 定制 head emd mar 處理方式

在LNMP中php是以一個服務的方式存在的,服務名為php-fpm
接受web訪問請求時和apache處理方式不同的是,apache通過編譯的模塊來解析php頁面,而nginx則是把php頁面交給php-fpm這個服務來進行解析。nginx優於apache的一點在於處理靜態請求,nginx會直接處理靜態請求,所有的動態請求都會轉發給php-fpm處理

技術分享圖片

安裝php

安裝獨立運行的php服務,需要提前安裝mysql,php需要依賴mysql服務才能進行正常的安裝使用,關於如何安裝mysql請參考我的另外一篇博客
在LNMP架構中安裝php不需要配合nginx來安裝,它是以一個服務的方式獨立運行的,安裝時需要指定mysql安裝目錄來編譯

php官網:php.net

創建php運行的用戶並進入解壓目錄下執行編譯

[root@localhost src]# useradd -s /sbin/nologin php-fpm
[root@localhost src]# tar zxf php-5.6.37.tar.gz -C .
[root@localhost src]# cd php-5.6.37/
[root@localhost php-5.6.37]# ./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/loca/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl

編譯中報錯缺少安裝庫,如下解決(缺少的庫後面跟devel進行yum安裝)

checking for xml2-config path...
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@localhost php-5.6.37]# yum install -y libxml2-devel
checking for cURL in default path... not found
configure: error: Please reinstall the libcurl distribution -
 ?  easy.h should be in <curl-dir>/include/curl/
[root@localhost php-5.6.37]# yum install -y libcurl-devel
checking whether to enable JIS-mapped Japanese font support in GD... no
If configure fails try --with-vpx-dir=<DIR>
configure: error: jpeglib.h not found.
[root@localhost php-5.6.37]# yum install -y libjpeg-devel

安裝完成沒有報錯的結果,如有報錯請分析報錯信息

Thank you for using PHP.

config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
[root@localhost php-5.6.37]# echo $?
0
Build complete.
Don‘t forget to run ‘make test‘.
[root@localhost php-5.6.37]# make install
Installing shared extensions: ? ? /usr/local/php-fpm/lib/php/extensions/no-debug-non-zts-20131226/
Installing PHP CLI binary: ? ? ?  /usr/local/php-fpm/bin/
Installing PHP CLI man page: ? ?  /usr/local/php-fpm/php/man/man1/
Installing PHP FPM binary: ? ? ?  /usr/local/php-fpm/sbin/
Installing PHP FPM config: ? ? ?  /usr/local/php-fpm/etc/
Installing PHP FPM man page: ? ?  /usr/local/php-fpm/php/man/man8/
Installing PHP FPM status page: ? /usr/local/php-fpm/php/php/fpm/
Installing PHP CGI binary: ? ? ?  /usr/local/php-fpm/bin/
Installing PHP CGI man page: ? ?  /usr/local/php-fpm/php/man/man1/
Installing build environment: ? ? /usr/local/php-fpm/lib/php/build/
Installing header files: ? ? ? ? ? /usr/local/php-fpm/include/php/
Installing helper programs: ? ? ? /usr/local/php-fpm/bin/
  program: phpize
  program: php-config
Installing man pages: ? ? ? ? ? ? /usr/local/php-fpm/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment: ? ?  /usr/local/php-fpm/lib/php/
[PEAR] Archive_Tar ? ?- installed: 1.4.3
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util ? ? ? - installed: 1.4.2
[PEAR] PEAR ? ? ? ? ? - installed: 1.10.5
Wrote PEAR system config file at: /usr/local/php-fpm/etc/pear.conf
You may want to add: /usr/local/php-fpm/lib/php to your php.ini include_path
/usr/local/src/php-5.6.37/build/shtool install -c ext/phar/phar.phar /usr/local/php-fpm/bin
ln -s -f phar.phar /usr/local/php-fpm/bin/phar
Installing PDO headers: ? ? ? ? ? /usr/local/php-fpm/include/php/ext/pdo/

php的配置測試

在安裝目錄的sbin目錄下,有php的配置測試和查看可執行文件,可以使用-m、-i、-t等參數查看php環境及檢查配置

[root@localhost php-5.6.37]# /usr/local/php-fpm/sbin/php-fpm -m
[PHP Modules]
cgi-fcgi
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
hash
iconv
json
[root@localhost php-5.6.37]# /usr/local/php-fpm/sbin/php-fpm -t

拷貝php.ini配置文件。php配置文件有兩種類型,一個適用於開發環境(php.ini-development),一個適用於生產環境(php.ini-production),創建php-fpm.conf配置文件,並配置相關參數,參數說明如下

[root@localhost php-5.6.37]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
[root@localhost etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log
[www]
#listen =  /tmp/php-fcgi.sock
listen = 127.0.0.1:9000 ? ? 監聽的方式,一種是ip地址的網絡監聽,和進程之間如(nginx)通過網絡交換數據、一種是文件,通過讀寫文件內容來交換處理
listen.mode = 666 ? ? ? ? ? 監聽sock時生效,是用來設置scok文件權限的
user = php-fpm ? ? ? ? ?  運行php的用戶和組
group = php-fpm ?
pm = dynamic
pm.max_children = 50 ? ? ? ? ? ? ? ? ? ? php進程最大打開數量
pm.start_servers = 20 ? ? ? ? ? ? ? ? ? 服務啟動時打開的進程數量
pm.min_spare_servers = 5 ? ? ? ? 
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

拷貝php-fpm的啟動配置文件,並使用chkconfig命令添加至開機啟動當中

[root@localhost /]# cp /usr/local/src/php-5.6.37/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@localhost /]# chmod +x /etc/init.d/php-fpm 
[root@localhost /]# chkconfig --add php-fpm
[root@localhost /]# chkconfig --list
註意:該輸出結果只顯示 SysV 服務,並不包含原生 systemd 服務。SysV 配置數據可能被原生 systemd 配置覆蓋。 
 ? ?  如果您想列出 systemd 服務,請執行 ‘systemctl list-unit-files‘。
 ? ?  欲查看對特定 target 啟用的服務請執行
 ? ? ?‘systemctl list-dependencies [target]‘。
mysqld 0:關  1:關 2:開 3:開 4:開 5:開 6:關
netconsole 0:關  1:關 2:關 3:關 4:關 5:關 6:關
network 0:關 1:關 2:開 3:開 4:開 5:開 6:關
php-fpm 0:關 1:關 2:開 3:開 4:開 5:開 6:關

使用sbin目錄下的可執行文件檢查php的配置文件並啟動php服務,pool www是配置文件中定義的php池名稱


[root@localhost /]# /usr/local/php-fpm/sbin/php-fpm -t
[10-Aug-2018 22:08:48] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@localhost /]# service php-fpm start
Starting php-fpm done
[root@localhost /]# ps -aux |grep php-fpm
root 31242 0.0 0.4 123940 4904 ? Ss 22:09 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 31243 0.0 0.4 123940 4616 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31244 0.0 0.4 123940 4616 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31245 0.0 0.4 123940 4616 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31246 0.0 0.4 123940 4616 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31247 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31248 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31249 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31250 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31251 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31252 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31253 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31254 0.0 0.4 123940 4620 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31255 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31256 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31257 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31258 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31259 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31260 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31261 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
php-fpm 31262 0.0 0.4 123940 4624 ? S 22:09 0:00 php-fpm: pool www
root 31264 0.0 0.0 112724 976 pts/1 R+ 22:09 0:00 grep --color=auto php-fpm
```.
# nginx介紹
nginx官網 :nginx.org
nginx主要應用web服務、反向代理和負載均衡的作用上
nginx分支,淘寶基於nginx開發的Tengine,使用上和nginx一致,服務和配置名一致
nginx比起apache在處理靜態頁面時更有優勢,nginx最大區別在於Tenging支持一些定制化模塊,在安全限速方面比較突出,支持js、css合並,優化web的高並發的訪問需求
nginx核心+lua相關組件和模塊可以組成一個支持lua的高性能web容器openresty,openresty(openr‘s‘t)支持更高性能的web訪問需求

LNMP之安裝獨立的php服務