centos7.4下安裝配置PHP服務(wù)(源碼安裝)并配置nginx支持php
一片任、檢查php是否已經(jīng)安裝础浮,使用php -v刹悴,是否能夠看到版本號垛孔,或者使用rpm -qa | grep php查看是否安裝過提针。
# yum remove php* -y
二命爬、依賴包安裝
Linux軟件編譯安裝都需要依賴兩個(gè)安裝包 gcc gcc-c++ make 可使用yum在線安裝
# yum -y install gcc gcc-c++? make????
準(zhǔn)備php安裝前的前置軟件,用yum install xxxx即可安裝辐脖,當(dāng)然不嫌麻煩也可以自己編譯安裝饲宛,這里就不詳細(xì)說了。
1)zlib以及zlib-devel? zlib提供數(shù)據(jù)壓縮的函數(shù)庫嗜价,也是nginx的前置軟件艇抠,由于zlib需要編譯php的zlib擴(kuò)展,而編譯中會需要使用zlib.h這個(gè)頭文件久锥,頭文件在zlib-devel中家淤,因此也需要下載zlib-devel。
2)libxml2以及l(fā)ibxml-devel libxml2是一個(gè)c語言的xml程序庫瑟由,可以簡單的對xml進(jìn)行各種操作絮重,并且支持xpath查詢,以及部分支持xslt轉(zhuǎn)換等功能。
3)libxslt以及l(fā)ibxslt-devel 如果不安裝libxslt-devel會提示找不到xslt.config文件青伤,xslt是轉(zhuǎn)換xml到其他格式的擴(kuò)展督怜。
4)openssl以及openssl-devel 安全套接字層密碼庫
5)jpeg IJG的jpeg庫,php的gd庫所需狠角。
6)libpng 是c語言寫的比較底層的讀寫png文件的跨平臺的庫号杠,可以幫助輕松的讀寫png文件的每一行像素,php的gd庫所需丰歌。
7)freetype以及freetype-devel
免費(fèi)開源的且可移植的字體引擎姨蟋,提供統(tǒng)一的接口訪問多種字體格式,這兩個(gè)都是gd庫的依賴軟件动遭,所以如果沒有安裝芬探,或者版本太低,在安裝php時(shí)設(shè)定的是安裝gd庫則會報(bào)錯厘惦,另外不安裝-devel也是會報(bào)錯的偷仿,因?yàn)榫幾g擴(kuò)展的時(shí)候會缺少ft2build.h文件,報(bào)錯如下圖宵蕉。
8)gd gd是php處理圖形的擴(kuò)展庫
9)curl酝静,由于我的yum里的版本太低了,所以直接自己編譯安裝的羡玛,安裝方式很簡單别智,也就是wget
curl下載地址后tar解壓,新建/usr/local/curl文件夾稼稿,然后進(jìn)入curl解壓后的文件夾里配置./configure
--prefix=/usr/local/curl即可薄榛,最后make以及make install就安裝好了。
注意:xxx-devel是xxx軟件的開發(fā)包让歼,包含頭文件以及靜態(tài)庫甚至源碼敞恋。
下面是部分依賴包源碼下載地址,這里圖省事谋右,全都yum在線安裝
安裝yasm
下載地址:http://www.tortall.net/projects/yasm/releases/
http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# cd yasm-1.3.0
#./configure
#make&&make install
安裝libmcrypt
下載地址:https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/
https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
# cd libmcrypt-2.5.8
#./configure
#make&&make install
安裝tiff
下載地址:http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz
#cd tiff-4.0.9
#./configure --prefix=/usr/local/tiff --enable-shared
# make
#make install
安裝libpng
下載地址:http://www.libpng.org/pub/png/libpng.html
https://nchc.dl.sourceforge.net/project/libpng/libpng16/1.6.35/libpng-1.6.35.tar.gz
#cd libpng-1.6.35
#./configure --prefix=/usr/local/libpng --enable-shared
#make&&make install
安裝freetype
下載地址:http://ring.u-toyama.ac.jp/archives/graphics/freetype/freetype2/
http://ring.u-toyama.ac.jp/archives/graphics/freetype/freetype2/freetype-2.7.1.tar.gz
#cd freetype-2.7.1
#./configure --prefix=/usr/local/freetype --enable-shared
#make&&make install
安裝jpeg
下載地址:http://www.ijg.org/files/
http://www.ijg.org/files/jpegsrc.v9a.tar.gz
#cd jpeg-9a
#./configure --prefix=/usr/local/jpeg --enable-shared
#make&&make install
安裝libgd
下載地址:https://github.com/libgd/libgd/releases
https://github-production-release-asset-2e65be.s3.amazonaws.com/29669711/cb5172f2-8d93-11e7-9615-92822f694ebf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20181003%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20181003T090125Z&X-Amz-Expires=300&X-Amz-Signature=0d2408ac593ecefea66b1ed8435a5cb05ec0743c2bd1369c0c3b88faf8e9fa2d&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dlibgd-2.2.5.tar.gz&response-content-type=application%2Foctet-stream
#cd libgd-2.2.5
#./configure
--prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg
--with-png=/usr/local/libpng --with-freetype=/usr/local/freetype
--with-fontconfig=/usr/local/freetype --with-xpm=/usr/
--with-tiff=/usr/local/tiff --with-webp=/usr/local/libwebp/
#make&&make install
yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
為了安全保險(xiǎn)的給make出來硬猫,先更新依賴庫以防萬一:
yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel? pcre-devel
# yum -y install php-mbstring (自行選擇安裝)?
三、下載PHP安裝包
首先打開php官網(wǎng)http://php.net/點(diǎn)擊導(dǎo)航欄的Downloads進(jìn)入下載頁面:http://php.net/downloads.php改执,選擇合適的版本并選擇對應(yīng)國家鏡像進(jìn)行下載wgethttp://php.net/get/php-7.2.10.tar.gz/from/a/mirror啸蜜,我下載的是php-7.2.10.tar.gz
tar -zxvf php-7.2.10.tar.gz
cd php-7.2.10
新建待會要安裝php的文件夾:mkdir /usr/local/php
創(chuàng)建用戶useradd -s /sbin/nologin php
編譯安裝,實(shí)際上這里的配置項(xiàng)比上述還多辈挂,可以使用 ./configure --help命令查看所有選項(xiàng)衬横,以上這些選項(xiàng)在正常的php開發(fā)中完全夠用了,后期如果需要呢岗,可以選擇手動開啟相應(yīng)的模塊
注意:編譯的配置項(xiàng)是根據(jù)前面源碼安裝的依賴包的安裝路徑配置的路徑冕香,如果改為yum安裝的依賴包蛹尝,則無須寫路徑
嫌麻煩的可以從這一步起參考PHP官方安裝說明:http://php.net/manual/zh/install.unix.nginx.php
編譯???./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mcrypt=/usr/include --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache--enable-gd-native-ttf[php7.2版本無須此選項(xiàng)]
make-j2 && make install
四、配置PHP環(huán)境變量
在Linux
CentOS系統(tǒng)上 安裝完P(guān)HP和Nginx后悉尾,一般需要執(zhí)行查看版本命令’php -v’和’nginx
-v’,確認(rèn)是否安裝成功,如果在沒有添加到環(huán)境變量之前突那,執(zhí)行“php
-v”命令查看當(dāng)前php版本信息時(shí),則會提示命令不存在的錯誤构眯。不配置環(huán)境變量的前提下執(zhí)行php命令需直接轉(zhuǎn)到php的安裝目錄bin下愕难,執(zhí)行’./php
-v’即可。
[root@Anwar01 bin]# ./php -v
PHP 7.2.10 (cli) (built: Sep 30 2018 17:18:20) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
直接轉(zhuǎn)到到nginx的安裝目錄sbin下惫霸,執(zhí)行’./nginx -v’即可
# cd /usr/local/nginx/sbin/
# ./nginx -v
[root@Anwar01 sbin]# ./nginx -v
nginx version: nginx/1.15.4
?1猫缭、在profile文件末尾添加環(huán)境變量路徑,即可對所有系統(tǒng)用戶生效
# vi /etc/profile
export PATH=$PATH:/usr/local/php/bin
執(zhí)行命令source /etc/profile修改生效
通過echo $PATH命令查看是否添加成功?? ?
環(huán)境變量配置成功后壹店,便可在任意目錄下執(zhí)行php命令或者nginx命令了(注意下面的分號要在雙引號內(nèi)部猜丹,否則會報(bào)錯)??? ?
?export PATH=$PATH:/usr/local/nginx/sbin
$ php -r “echo ‘hello’;”???? ? ?
五、它項(xiàng)配置硅卢,啟動配置
設(shè)置php.ini射窒,使用: vim /usr/local/php/lib/php.ini
打開php配置文件找到cgi.fix_pathinfo配置項(xiàng),這一項(xiàng)默認(rèn)被注釋并且值為1将塑,根據(jù)官方文檔的說明脉顿,這里為了當(dāng)文件不存在時(shí),阻止Nginx將請求發(fā)送到后端的PHP-FPM模塊点寥,從而避免惡意腳本注入的攻擊艾疟,所以此項(xiàng)應(yīng)該去掉注釋并設(shè)置為0
設(shè)置完畢保存并退出
另外注意一個(gè)地方就是php.ini配置文件的位置可以在編譯前配置參數(shù)中設(shè)置,編譯參數(shù)可以寫成:--with-config-file-path=/usr/local/php
這樣的話php就回去指定的目錄下讀取php.ini配置文件敢辩,如果不加這個(gè)參數(shù)默認(rèn)位置就是php安裝目錄下的lib目錄蔽莱,具體也可以在phpinfo()輸出界面查看,如果php.ini放到其他位置戚长,php讀取不到碾褂,那么所有的配置修改后都是不生效的,這點(diǎn)要注意
配置php-fpm
cd /usr/local/src/php-7.2.10????
cp ./php.ini-production /usr/local/php/etc/php.ini//復(fù)制php配置文件到安裝目錄
rm -rf /etc/php.ini????????? //刪除系統(tǒng)自帶配置文件
ln -s? /usr/local/php/etc/php.ini /etc/php.ini???????? //添加軟鏈接到 /etc目錄
# ls -l? /etc/php.ini
lrwxrwxrwx. 1 root root 26 10月? 6 13:17 /etc/php.ini -> /usr/local/php/etc/php.ini
cd /usr/local/php/etc
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf?????? //復(fù)制模板文件為php-fpm配置
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
ln -s /usr/local/php/etc/php-fpm.conf? /etc/php-fpm.conf?? //添加軟件鏈接到 /etc目錄
/usr/local/php/sbin/php-fpm? //啟動php-fpm
編輯php配置文件
# vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid ? ?? //如果這個(gè)選項(xiàng)在配置文件存在就取消掉注釋使用历葛,如果不存在可以忽略,請勿手動添加嘀略,否則PHP啟動會報(bào)錯恤溶。
user = www
group = www
:wq!? #保存并退出
cp etc/php-fpm.d/www.conf.defaultetc/php-fpm.d/www.conf
?# cp /usr/local/src/php-7.2.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm//添加php-fpm腳本到啟動項(xiàng)
# ls -l /etc/init.d/php-fpm????
# chmod 755 /etc/init.d/php-fpmchmod +x /etc/init.d/php-fpm? //賦予php-fpm執(zhí)行權(quán)限
# ls -l /etc/init.d/php-fpm
? -rwxr-xr-x. 1 root root 2405 10月? 6 13:21 /etc/init.d/php-fpm
設(shè)置php-fpm開機(jī)啟動
# chkconfig php-fpm on
# chkconfig --list php-fpm
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
/etc/init.d/php-fpm start
service php-fpm start
六、配置nginx支持php
LNMP環(huán)境中的nginx是不支持php的帜羊,需要通過fastcgi插件來處理有關(guān)php的請求咒程。而php需要php-fpm這個(gè)組件提供該功能。在php5.3.3以前的版本php-fpm是以一個(gè)補(bǔ)丁包的形式存在的讼育,而php5.3.3以后只需在編譯安裝時(shí)使用–enable-fpm加載該模塊即可帐姻,無需另行安裝稠集。
檢查www用戶和www用戶組是否存在,不存在請手動創(chuàng)建
# cat /etc/passwd | grep www
# cat /etc/group | grep www
# vim /usr/local/nginx/conf/nginx.conf
user www www;
#首行user去掉注釋,修改Nginx運(yùn)行組為www www饥瓷;必須與/usr/local/php/etc/php-fpm.d/www.conf中的user,group配置相同剥纷,否則php運(yùn)行出錯
location / {
root html;
index index.html index.htm index.php;? //添加index.php
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#取消FastCGI server部分location的注釋,注意fastcgi_param行的參數(shù)呢铆,改為$document_root$fastcgi_script_name晦鞋,或者使用絕對路徑
:wq! #保存并退出
啟動nginx服務(wù)
# /etc/init.d/nginx restart
#啟動php服務(wù)
# /etc/init.d/php-fpm start
測試php配置
進(jìn)入nginx默認(rèn)網(wǎng)站根目錄
# cd /usr/local/nginx/html/
# ls
50x.html index.html
刪除默認(rèn)測試頁
# rm -rf /usr/local/nginx/html/*
# pwd
/usr/local/nginx/html
新建index.php文件進(jìn)行測試
# vim index.php
<?php
phpinfo();
?>
:wq! #保存并退出
設(shè)置目錄所有者為 www
# chown www.www /usr/local/nginx/html/ -R
設(shè)置目錄權(quán)限
# chmod 755 /usr/local/nginx/html/ -R
打開瀏覽器輸入服務(wù)器IP地址,會看到下面的界面就是php安裝成功
PHP Version 7.2.10
SystemLinux Anwar02 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
Build DateOct 8 2018 16:46:22
Configure Command'./configure' '--prefix=/usr/local/php'
'--with-config-file-path=/usr/local/php/etc'
'--with-mcrypt=/usr/include' '--with-mysql=mysqlnd'
'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd'
'--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath'
'--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization'
'--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp'
'--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl'
'--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap'
'--without-pear' '--with-gettext' '--enable-session' '--with-curl'
'--with-jpeg-dir' '--with-freetype-dir' '--enable-opcache'
Server APIFPM/FastCGI
Virtual Directory Supportdisabled
Configuration File (php.ini) Path/usr/local/php/etc
Loaded Configuration File/usr/local/php/etc/php.ini
可能有的錯誤的原因是沒有創(chuàng)建www這個(gè)用戶,應(yīng)該在服務(wù)器系統(tǒng)中添加www用戶組和用戶www棺克,如下命令:
#/usr/sbin/groupadd -f www
#/usr/sbin/useradd -g www www
七悠垛、優(yōu)化配置
編輯php配置文件php.ini
# vim /usr/local/php/etc/php.ini
找到:disable_functions =?????? 修改成disable_functions=passthru, exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status, ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink, symlink,popepassthru,stream_socket_server, escapeshellcmd, dll, popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname, getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid, posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit,posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid, posix_setuid,? posix_strerror,posix_times,posix_ttyname,posix_uname//一些需要禁用的PHP危險(xiǎn)函數(shù),提高PHP主機(jī)安全性(disable_functions)
找到:date.timezone =?? 修改為:date.timezone = PRC?? ? ? ? ? ?? //設(shè)置時(shí)區(qū)
找到:expose_php = On???? 修改為:expose_php = Off???????????? //禁止顯示php版本的信息
找到:short_open_tag = Off??? 修改為:short_open_tag = On ? ? ? ? ? ? ? ? ? //支持php短標(biāo)簽
找到opcache.enable=0?? 修改為opcache.enable=1????????????????????????? //php支持opcode緩存
找到:opcache.enable_cli=1??? 修改為:opcache.enable_cli=0???????????????????????? //php支持opcode緩存
在最后一行添加:zend_extension=opcache.so????????????????????????? //開啟opcode緩存功能 (在文本按Shift+G就能跳到最后一行)
:wq! #保存并退出