解決依賴:
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel mhash gd gd-devel 編譯安裝php7
先從官方網(wǎng)站下載php7,并且解壓
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-config-file-scan-dir=/usr/local/php7/etc/php.d --with-mcrypt=/usr/include --enable-mysqlnd --with-mysqli --with-pdo-mysql --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-gd --with-iconv --with-zlib --enable-xml --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --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
配置無誤后執(zhí)行:
$ make -j4 $ make install 添加用戶和組
sudo groupadd -r www $ sudo useradd -s /sbin/nologin -g nginx -r www 調(diào)整php配置
默認(rèn)安裝好之后,你會發(fā)現(xiàn)/usr/local/php7/etc下面沒有php.ini文件,這個(gè)去哪里要呢?在php7的源碼安裝包都有。
cd /usr/src/php-7.0.0/ $ ls
可以看到有兩個(gè)php.ini-xxx文件,我們可以分別vi打開來看下,一個(gè)是產(chǎn)品模式,一個(gè)是開發(fā)模式。
$ cp php.ini-production /usr/local/php7/etc/php.ini $ vi /usr/local/php7/etc/php.ini
可以看到php的配置。本文就不做過多的配置解釋了。
啟用php-fpm服務(wù)上面我們在編譯php7的時(shí)候,已經(jīng)將fpm模塊編譯了,那么接下來,我們要啟用php-fpm。但是默認(rèn)情況下它的配置文件和服務(wù)都沒有啟用,所以要我們自己來搞定。
搞定配置文件:
$ cd /usr/local/php7/etc $ mv php-fpm.conf.default php-fpm.conf $ mv php-fpm.d/www.conf.default php-fpm.d/www.conf
配置php-fpm.conf
[global] pid = /var/run/php-fpm.pid error_log = /var/log/php/php-fpm.log log_level = notice
配置 www.conf文件
[www] listen = /var/run/php-fpm.sock ;listen = 127.0.0.1:9000 user = www group = www listen.owner = www listen.group = www listen.mode = 0666 pm = dynamic pm.max_children = 400 pm.start_servers = 32 pm.min_spare_servers = 32 pm.max_spare_servers = 400 pm.max_requests = 10240
php-fpm的具體配置我們也不做深入去詳解,因?yàn)樵诰幾g之前./configure的時(shí)候,我們都已經(jīng)確定了一些配置,比如運(yùn)行fpm的用戶和用戶組之類的,所以默認(rèn)配置應(yīng)該不會存在路徑問題和權(quán)限問題。
搞定php-fpm的服務(wù)載入:
就像上面的nginx一樣,我們希望使用service php-fpm start|stop|restart這些操作來實(shí)現(xiàn)服務(wù)的重啟,但沒有像nginx那么復(fù)雜,php編譯好之后,給我們提供了一個(gè)php-fpm的程序,不需要我再編寫分享了。這個(gè)文件放在php編譯源碼目錄中:
$ cd /usr/src/php-7.0.0/sapi/fpm $ ls $ cp init.d.php-fpm /etc/init.d/php-fpm $ chmod +x /etc/init.d/php-fpm $ chkconfig --add php-fpm $ chkconfig php-fpm on
通過上面這個(gè)操作,我們就可以使用sevice php-fpm start來啟用php-fpm了。用ps -ef | grep php-fpm看看進(jìn)程吧。
nginx代理php實(shí)現(xiàn)訪問通過上面的操作,nginx和php-fpm服務(wù)都被我們跑起來了,但是php-fpm走的是127.0.0.1:9000,外網(wǎng)是無法訪問的,而且我們也不可能直接通過php-fpm給外網(wǎng)提供服務(wù),我們用nginx去代理9000端口執(zhí)行php。
實(shí)際上這個(gè)過程只需要對nginx進(jìn)行配置即可,fpm已經(jīng)在后臺運(yùn)行了,我們需要在nginx的配置文件中增加代理的規(guī)則,即可讓用戶在訪問80端口,請求php的時(shí)候,交由后端的fpm去執(zhí)行,并返回結(jié)果。
vi /usr/local/nginx/conf/nginx.conf
如果你大致了解過nginx的配置,應(yīng)該能夠很快分辨出這個(gè)配置文件里面的結(jié)構(gòu),并且知道server代表一個(gè)虛擬主機(jī),要增加虛擬主機(jī)就再增加一個(gè)server,而且這個(gè)conf文件中也給出了例子。那么怎么代理php-fpm呢?找到:
#location ~ .php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name; # include fastcgi_params; #}
把前面的#注釋符號去掉,把script改為$document_root最終如下:
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; }
這樣就OK了,重新載入nginx配置即可
$ service nginx reload
然后到/usr/local/nginx/html去寫一個(gè)php文檔,進(jìn)行測試吧。
如果你的程序能夠正常運(yùn)行起來,用ip作為外網(wǎng)訪問地址訪問成功,那么恭喜你,本篇文章的目的就達(dá)到了
添加php的環(huán)境變量和啟動profile 配置
echo "export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH">> /etc/profile source /etc/profile service php-fpm start