20.2.3 配置php服務(wù)

2022-06-01 17:36 更新

PHP(Hypertxt Preprocessor,超文本預(yù)處理器)是一種通用的開源腳本語言,發(fā)明于1995年,它吸取了C語言、Java語言及Perl語言的很多優(yōu)點(diǎn),具有開源、免費(fèi)、快捷、跨平臺性強(qiáng)、效率高等優(yōu)良特性,是目前Web開發(fā)領(lǐng)域最常用的語言之一。本書的配套站點(diǎn)就是基于PHP語言編寫的。

使用源碼包的方式編譯安裝PHP語言環(huán)境其實并不復(fù)雜,難點(diǎn)在于解決PHP的程序包和其他軟件的依賴關(guān)系。為此需要先安裝部署將近十個用于搭建網(wǎng)站頁面的軟件程序包,然后才能正式安裝PHP程序。

yasm源碼包是一款常見的開源匯編器,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe nginx-1.6.0]# cd ..
    [root@linuxprobe src]# tar zxvf yasm-1.2.0.tar.gz
    [root@linuxprobe src]# cd yasm-1.2.0
    [root@linuxprobe yasm-1.2.0]# ./configure
    [root@linuxprobe yasm-1.2.0]# make
    [root@linuxprobe yasm-1.2.0]# make install

libmcrypt源碼包是用于加密算法的擴(kuò)展庫程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe yasm-1.2.0]# cd ..
    [root@linuxprobe src]# tar zxvf libmcrypt-2.5.8.tar.gz
    [root@linuxprobe src]# cd libmcrypt-2.5.8
    [root@linuxprobe libmcrypt-2.5.8]# ./configure
    [root@linuxprobe libmcrypt-2.5.8]# make
    [root@linuxprobe libmcrypt-2.5.8]# make install

libvpx源碼包是用于提供視頻編碼器的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。相信會有很多粗心的讀者順手使用了tar命令的xzvf參數(shù),但如果仔細(xì)觀察就會發(fā)現(xiàn)libvpx源碼包的后綴是.tar.bz2,即表示使用bzip2格式進(jìn)行的壓縮,因此正確的解壓參數(shù)應(yīng)該是xjvf:

    [root@linuxprobe libmcrypt-2.5.8]# cd ..
    [root@linuxprobe src]# tar xjvf libvpx-v1.3.0.tar.bz2
    [root@linuxprobe src]# cd libvpx-v1.3.0
    [root@linuxprobe libvpx-v1.3.0]# ./configure --prefix=/usr/local/libvpx --enable-shared --enable-vp9
    [root@linuxprobe libvpx-v1.3.0]# make
    [root@linuxprobe libvpx-v1.3.0]# make install

tiff源碼包是用于提供標(biāo)簽圖像文件格式的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe libvpx-v1.3.0]# cd ..
    [root@linuxprobe src]# tar zxvf tiff-4.0.3.tar.gz
    [root@linuxprobe src]# cd tiff-4.0.3
    [root@linuxprobe tiff-4.0.3]# ./configure --prefix=/usr/local/tiff --enable-shared
    [root@linuxprobe tiff-4.0.3]# make
    [root@linuxprobe tiff-4.0.3]# make install

libpng源碼包是用于提供png圖片格式支持函數(shù)庫的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe tiff-4.0.3]# cd ..
    [root@linuxprobe src]# tar zxvf libpng-1.6.12.tar.gz
    [root@linuxprobe src]# cd libpng-1.6.12
    [root@linuxprobe libpng-1.6.12]# ./configure --prefix=/usr/local/libpng --enable-shared
    [root@linuxprobe libpng-1.6.12]# make
    [root@linuxprobe libpng-1.6.12]# make install

freetype源碼包是用于提供字體支持引擎的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe libpng-1.6.12]# cd ..
    [root@linuxprobe src]# tar zxvf freetype-2.5.3.tar.gz
    [root@linuxprobe src]# cd freetype-2.5.3
    [root@linuxprobe freetype-2.5.3]# ./configure --prefix=/usr/local/freetype --enable-shared
    [root@linuxprobe freetype-2.5.3]# make
    [root@linuxprobe freetype-2.5.3]# make install

jpeg源碼包是用于提供jpeg圖片格式支持函數(shù)庫的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略:

    [root@linuxprobe freetype-2.5.3]# cd ..
    [root@linuxprobe src]# tar zxvf jpegsrc.v9a.tar.gz
    [root@linuxprobe src]# cd jpeg-9a
    [root@linuxprobe jpeg-9a]# ./configure --prefix=/usr/local/jpeg --enable-shared
    [root@linuxprobe jpeg-9a]# make
    [root@linuxprobe jpeg-9a]# make install

libgd源碼包是用于提供圖形處理的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。在編譯libgd源碼包時,請記得寫入的是jpeg、libpng、freetype、tiff、libvpx等服務(wù)程序在系統(tǒng)中的安裝路徑,即在上面安裝過程中使用--prefix參數(shù)指定的目錄路徑:

    [root@linuxprobe jpeg-9a]# cd ..
    [root@linuxprobe src]# tar zxvf libgd-2.1.0.tar.gz
    [root@linuxprobe src]# cd libgd-2.1.0
    [root@linuxprobe libgd-2.1.0]# ./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-vpx=/usr/local/libvpx
    [root@linuxprobe libgd-2.1.0]# make
    [root@linuxprobe libgd-2.1.0]# make install

t1lib源碼包是用于提供圖片生成函數(shù)庫的服務(wù)程序,其解壓、編譯、安裝過程中生成的輸出信息均已省略。安裝后把/usr/lib64目錄中的函數(shù)文件鏈接到/usr/lib目錄中,以便系統(tǒng)能夠順利調(diào)取到函數(shù)文件:

    [root@linuxprobe cd libgd-2.1.0]# cd ..
    [root@linuxprobe src]# tar zxvf t1lib-5.1.2.tar.gz
    [root@linuxprobe src]# cd t1lib-5.1.2
    [root@linuxprobe t1lib-5.1.2]# ./configure --prefix=/usr/local/t1lib --enable-shared
    [root@linuxprobe t1lib-5.1.2]# make
    [root@linuxprobe t1lib-5.1.2]# make install
    [root@linuxprobe t1lib-5.1.2]# ln -s /usr/lib64/libltdl.so /usr/lib/libltdl.so 
    [root@linuxprobe t1lib-5.1.2]# cp -frp /usr/lib64/libXpm.so* /usr/lib/

此時終于把編譯php服務(wù)源碼包的相關(guān)軟件包都已經(jīng)安裝部署妥當(dāng)了。在開始編譯php源碼包之前,先定義一個名為LD_LIBRARY_PATH的全局環(huán)境變量,該環(huán)境變量的作用是幫助系統(tǒng)找到指定的動態(tài)鏈接庫文件,這些文件是編譯php服務(wù)源碼包的必須元素之一。編譯php服務(wù)源碼包時,除了定義要安裝到的目錄以外,還需要依次定義配置php服務(wù)程序配置文件的保存目錄、MySQL數(shù)據(jù)庫服務(wù)程序所在目錄、MySQL數(shù)據(jù)庫服務(wù)程序配置文件所在目錄,以及l(fā)ibpng、jpeg、freetype、libvpx、zlib、t1lib等服務(wù)程序的安裝目錄路徑,并通過參數(shù)啟動php服務(wù)程序的諸多默認(rèn)功能:

    [root@linuxprobe t1lib-5.1.2]# cd ..
    [root@linuxprobe src]# tar -zvxf php-5.5.14.tar.gz
    [root@linuxprobe src]# cd php-5.5.14
    [root@linuxprobe php-5.5.14]# export LD_LIBRARY_PATH=/usr/local/libgd/lib
    [root@linuxprobe php-5.5.14]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-gd --with-png-dir=/usr/local/libpng --with-jpeg-dir=/usr/local/jpeg --with-freetype-dir=/usr/local/freetype --with-xpm-dir=/usr/ --with-vpx-dir=/usr/local/libvpx/ --with-zlib-dir=/usr/local/zlib --with-t1lib=/usr/local/t1lib --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --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-mcrypt --with-curl --enable-ctype 
    [root@linuxprobe php-5.5.14]# make
    [root@linuxprobe php-5.5.14]# make install

在php源碼包程序安裝完成后,需要刪除當(dāng)前默認(rèn)的配置文件,然后將php服務(wù)程序目錄中相應(yīng)的配置文件復(fù)制過來:

    [root@linuxprobe php-5.5.14]# rm -rf /etc/php.ini
    [root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php.ini /etc/php.ini
    [root@linuxprobe php-5.5.14]# cp php.ini-production /usr/local/php/etc/php.ini
    [root@linuxprobe php-5.5.14]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
    [root@linuxprobe php-5.5.14]# ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf

php-fpm.conf是php服務(wù)程序重要的配置文件之一,我們需要啟用該配置文件中第25行左右的pid文件保存目錄,然后分別將第148和149行的user與group參數(shù)分別修改為www賬戶和用戶組名稱:

    [root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php-fpm.conf
    1 ;;;;;;;;;;;;;;;;;;;;;
    2 ; FPM Configuration ;
    3 ;;;;;;;;;;;;;;;;;;;;;
    4 
    5 ; All relative paths in this configuration file are relative to PHP's instal l
    6 ; prefix (/usr/local/php). This prefix can be dynamically changed by using t he
    7 ; '-p' argument from the command line.
    8 
    9 ; Include one or more files. If glob(3) exists, it is used to include a bunc h of
    10 ; files from a glob(3) pattern. This directive can be used everywhere in the
    11 ; file.
    12 ; Relative path can also be used. They will be prefixed by:
    13 ; - the global prefix if it's been set (-p argument)
    14 ; - /usr/local/php otherwise
    15 ;include=etc/fpm.d/*.conf
    16 
    17 ;;;;;;;;;;;;;;;;;;
    18 ; Global Options ;
    19 ;;;;;;;;;;;;;;;;;;
    20 
    21 [global]
    22 ; Pid file
    23 ; Note: the default prefix is /usr/local/php/var
    24 ; Default Value: none
    25 pid = run/php-fpm.pid
    26 
    ………………省略部分輸出信息………………
    145 ; Unix user/group of processes
    146 ; Note: The user is mandatory. If the group is not set, the default user's g roup
    147 ; will be used.
    148 user = www
    149 group = www
    150 
    ………………省略部分輸出信息………………

配置妥當(dāng)后便可把用于管理php服務(wù)的腳本文件復(fù)制到/etc/rc.d/init.d中了。為了能夠執(zhí)行腳本,請記得為腳本賦予755權(quán)限。最后把php-fpm服務(wù)程序加入到開機(jī)啟動項中:

    [root@linuxprobe php-5.5.14]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
    [root@linuxprobe php-5.5.14]# chmod 755 /etc/rc.d/init.d/php-fpm
    [root@linuxprobe php-5.5.14]# chkconfig php-fpm on

由于php服務(wù)程序的配置參數(shù)直接會影響到Web服務(wù)服務(wù)的運(yùn)行環(huán)境,因此,如果默認(rèn)開啟了一些不必要且高危的功能(如允許用戶在網(wǎng)頁中執(zhí)行Linux命令),則會降低網(wǎng)站被入侵的難度,入侵人員甚至可以拿到整臺Web服務(wù)器的管理權(quán)限。因此我們需要編輯php.ini配置文件,在305行的disable_functions參數(shù)后面追加上要禁止的功能。下面的禁用功能名單是劉遄老師依據(jù)網(wǎng)站運(yùn)行的經(jīng)驗而定制的,不見得適合每個生產(chǎn)環(huán)境,建議大家在此基礎(chǔ)上根據(jù)自身工作需求酌情刪減:

    [root@linuxprobe php-5.5.14]# vim /usr/local/php/etc/php.ini
    ………………省略部分輸出信息………………
    300 
    301 ; This directive allows you to disable certain functions for security reasons.
    302 ; It receives a comma-delimited list of function names. This directive is
    303 ; *NOT* affected by whether Safe Mode is turned On or Off.
    304 ; http://php.net/disable-functions
    305 disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restor e,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,g etservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,po six_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
    306 
    ………………省略部分輸出信息………………

這樣就把php服務(wù)程序配置妥當(dāng)了。最后,還需要編輯Nginx服務(wù)程序的主配置文件,把第2行的井號(#)刪除,然后在后面寫上負(fù)責(zé)運(yùn)行Nginx服務(wù)程序的賬戶名稱和用戶組名稱;在第45行的index參數(shù)后面寫上網(wǎng)站的首頁名稱。最后是將第65~71行參數(shù)前的井號(#)刪除來啟用參數(shù),主要是修改第69行的腳本名稱路徑參數(shù),其中$document_root變量即為網(wǎng)站信息存儲的根目錄路徑,若沒有設(shè)置該變量,則Nginx服務(wù)程序無法找到網(wǎng)站信息,因此會提示“404頁面未找到”的報錯信息。在確認(rèn)參數(shù)信息填寫正確后便可重啟Nginx服務(wù)與php-fpm服務(wù)。

    [root@linuxprobe php-5.5.14]# vim /usr/local/nginx/conf/nginx.conf
     1 
     2 user www www;
     3 worker_processes 1;
     4 
     5 #error_log logs/error.log;
     6 #error_log logs/error.log notice;
     7 #error_log logs/error.log info;
     8 
     9 #pid logs/nginx.pid;
     10 
     11 
    ………………省略部分輸出信息………………
     40 
     41 #access_log logs/host.access.log main;
     42 
     43 location / {
     44 root html;
     45 index index.html index.htm index.php;
     46 }
     47 
    ………………省略部分輸出信息………………
     62 
     63 #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     64 
     65 location ~ \.php$ {
     66 root html;
     67 fastcgi_pass 127.0.0.1:9000;
     68 fastcgi_index index.php;
     69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     70 include fastcgi_params;
     71 }
     72 
    ………………省略部分輸出信息………………
    [root@linuxprobe php-5.5.14]# systemctl restart nginx
    [root@linuxprobe php-5.5.14]# systemctl restart php-fpm

至此,LNMP動態(tài)網(wǎng)站環(huán)境架構(gòu)的配置實驗全部結(jié)束。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號