【推薦】CentOS安裝PHP-5.6.4+擴展安裝+安全配置+性能配置

来源:http://www.cnblogs.com/brishenzhou/archive/2016/12/07/6140699.html
-Advertisement-
Play Games

CentOS 6.5 x86_64系統下安裝PHP-5.6.4,並且根據生產環境需要做了一定的配置,比如增加了memcache、memcached和redis的擴展支持,對PHP環境安全做了一定配置等。 ...


 

註:以下所有操作均在CentOS 6.5 x86_64位系統下完成。

 

#準備工作#

前段時間PHP官方發佈了一個重要的安全升級公告,修複了兩個unserialize函數的嚴重漏洞,目前受影響的版本有:

  • <5.4.36
  • <5.5.20
  • <5.6.4

這裡我們直接下載5.6.4的版本進行安裝配置,並且在這之前需要先把MySQL和Apache已經安裝好,最好Nginx也先安裝好,具體見:《CentOS安裝MySQL-5.6.10+安全配置》《CentOS安裝Apache-2.4.10+安全配置》

 

#PHP的安裝#

開始下載PHP併進行編譯安裝: 

# wget http://cn2.php.net/distributions/php-5.6.4.tar.gz
# tar zxf php-5.6.4.tar.gz
# cd php-5.6.4
# export LD_LIBRARY_PATH=/usr/local/mysql/lib
# ./configure --prefix=/usr/local/php-5.6.4 --with-config-file-path=/usr/local/php-5.6.4/etc --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-apxs2=/usr/local/apache/bin/apxs --enable-fpm --enable-shared --enable-zip --with-bz2 --enable-ftp --with-jpeg-dir --with-png-dir --with-freetype-dir --with-libxml-dir --with-xmlrpc --with-zlib-dir --with-gd --with-gmp --enable-gd-native-ttf --with-curl --with-regex=php --with-pic --with-xsl --enable-wddx --with-iconv --with-gettext --with-pear --enable-ctype --enable-calendar --enable-mbstring --enable-bcmath --enable-sockets  --enable-exif --disable-rpath  --with-mcrypt --with-mhash  --with-openssl --enable-sysvsem --enable-sigchild --enable-sysvshm --enable-soap  --disable-fileinfo --enable-opcache=no
...
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

# make
...
Build complete.
Don't forget to run 'make test'.

# make install
...
Installing PHP SAPI module:       apache2handler
/usr/local/apache-2.4.10/build/instdso.sh SH_LIBTOOL='/usr/local/apr/build-1/libtool' libphp5.la /usr/local/apache-2.4.10/modules
/usr/local/apr/build-1/libtool --mode=install install libphp5.la /usr/local/apache-2.4.10/modules/
install .libs/libphp5.so /usr/local/apache-2.4.10/modules/libphp5.so
install .libs/libphp5.lai /usr/local/apache-2.4.10/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /usr/local/src/php-5.6.4/libs'
chmod 755 /usr/local/apache-2.4.10/modules/libphp5.so
[activating module `php5' in /usr/local/apache-2.4.10/conf/httpd.conf]
Installing PHP CLI binary:        /usr/local/php-5.6.4/bin/
Installing PHP CLI man page:      /usr/local/php-5.6.4/php/man/man1/
Installing PHP FPM binary:        /usr/local/php-5.6.4/sbin/
Installing PHP FPM config:        /usr/local/php-5.6.4/etc/
Installing PHP FPM man page:      /usr/local/php-5.6.4/php/man/man8/
Installing PHP FPM status page:   /usr/local/php-5.6.4/php/fpm/
Installing PHP CGI binary:        /usr/local/php-5.6.4/bin/
Installing PHP CGI man page:      /usr/local/php-5.6.4/php/man/man1/
Installing build environment:     /usr/local/php-5.6.4/lib/php/build/
Installing header files:          /usr/local/php-5.6.4/include/php/
Installing helper programs:       /usr/local/php-5.6.4/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php-5.6.4/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php-5.6.4/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.12
[PEAR] Console_Getopt - installed: 1.3.1
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.3
[PEAR] PEAR           - installed: 1.9.5
Wrote PEAR system config file at: /usr/local/php-5.6.4/etc/pear.conf
You may want to add: /usr/local/php-5.6.4/lib/php to your php.ini include_path
/usr/local/src/php-5.6.4/build/shtool install -c ext/phar/phar.phar /usr/local/php-5.6.4/bin
ln -s -f /usr/local/php-5.6.4/bin/phar.phar /usr/local/php-5.6.4/bin/phar
Installing PDO headers:          /usr/local/php-5.6.4/include/php/ext/pdo/

# ln -s /usr/local/php-5.6.4/ /usr/local/php

給PHP的upload和session添加目錄支持:

# mkdir -p /data/php/upload
# mkdir -p /data/php/session

至此,PHP已經安裝完畢。

 

#PHP-FPM的啟動/關閉/重啟#

自PHP-5.3.3開始,php源碼中包含了php-fpm,不需要再單獨通過布丁的方式來安裝php-fpm,在編譯的時候加入參數--enable-fpm即可。 

FPM(FastCGI Process Manager)用於替換PHP FastCGI的大部分附加功能,對於高負載網站非常有用。

首先將bin/php-fpm加入到系統PATH中:

# vim /etc/profile

export PHP_HOME=/usr/local/php
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin

$ source /etc/profile

$ php -version
PHP 5.6.4 (cli) (built: Jan  3 2015 11:16:17)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies

然後複製預設的配置文件:

# cp /usr/local/src/php-5.6.4/php.ini-production /usr/local/php-5.6.4/etc/php.ini
# cp /usr/local/php-5.6.4/etc/php-fpm.conf.default /usr/local/php-5.6.4/etc/php-fpm.conf

接下來修改預設配置文件:

# vim /usr/local/php/etc/php.ini

date.timezone = Asia/Shanghai

# vim /usr/local/php/etc/php-fpm.conf

[global]
pid = /usr/local/php-5.6.4/var/run/php-fpm.pid
error_log = /usr/local/php-5.6.4/var/log/php-fpm.log
log_level = error

[www]
user = www
group = www
listen = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0666

添加啟動腳本,之後可以使用service來啟動php-fpm程式,並且設置開機自啟動:

# cp /usr/local/src/php-5.6.4/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# service php-fpm
Usage: /etc/init.d/php-fpm {start|stop|force-quit|restart|reload|status}
# chkconfig php-fpm on

啟動php-fpm:

# service php-fpm start
Starting php-fpm  done

如果啟動的時候出現錯誤(實際操作中發現存在該情況):

Starting php-fpm /usr/local/php-5.6.4/sbin/php-fpm: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
 failed

則將MySQL的so庫文件copy到系統下:

# cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

再來重新啟動PHP,這次啟動成功。

 

#PHP+Nginx#

現在來編輯nginx.conf以支持php解析,查看當前php環境是否可以正常運行:

# vim /usr/local/nginx/conf/nginx.conf

http {
    server {
        listen       80;
        server_name  localhost;
        root         html;
        index        index.html index.php;
        location ~ \.php$ {
            try_files      $uri = 404;
            include        fastcgi.conf;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

然後編寫一個簡單的php文件,用來顯示當前PHP環境信息:

# vim /usr/local/nginx-1.6.2/html/phpinfo.php

<?php
phpinfo();
?>

# chown -R www:www /usr/local/nginx-1.6.2

啟動Nginx,並打開瀏覽器訪問地址http://youripaddress/phpinfo.php應該可以看到:

至此,Nginx與PHP已經可以正常協同工作。

 

#PHP的擴展安裝#

很多時候我們還需要給PHP安裝各種擴展支持,比如memcache、redis、mongodb等,下麵用幾個例子來說明下。

1、安裝memcache擴展: 

# wget http://pecl.php.net/get/memcache-2.2.7.tgz
# tar zxf memcache-2.2.7.tgz
# cd memcache-2.2.7
# /usr/local/php-5.6.4/bin/phpize
# ./configure --with-php-config=/usr/local/php-5.6.4/bin/php-config
# make && make install
Installing shared extensions:     /usr/local/php-5.6.4/lib/php/extensions/no-debug-zts-20131226/

2、安裝memcached擴展(支持SASL): 

1)首先可以使用yum安裝SASL環境:

# yum install cyrus-sasl-plain cyrus-sasl cyrus-sasl-devel cyrus-sasl-lib

2)然後下載並安裝libmemecached:

# wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
# tar zxf libmemcached-1.0.18.tar.gz
# cd libmemcached-1.0.18
# ./configure --prefix=/usr/local/libmemcached-1.0.18 --enable-sasl
# make && make install

3)最後再安裝memcached擴展:

# wget http://pecl.php.net/get/memcached-2.2.0.tgz
# tar zxf memecached-2.2.0.tgz
# cd memecached-2.2.0
# /usr/local/php-5.6.4/bin/phpize
# ./configure --with-php-config=/usr/local/php-5.6.4/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached-1.0.18 --enable-memcached-sasl
# make && make install
Installing shared extensions:     /usr/local/php-5.6.4/lib/php/extensions/no-debug-zts-20131226/

註:前面安裝的libmemcached必須支持SASL,否則可能出現如下錯誤:

configure: error: no, libmemcached sasl support is not enabled. Run configure with --disable-memcached-sasl to disable this check

3、安裝redis擴展:

# wget http://pecl.php.net/get/redis-2.2.7.tgz
# tar zxf redis-2.2.7.tgz
# cd redis-2.2.7
# /usr/local/php-5.6.4/bin/phpize
# ./configure --with-php-config=/usr/local/php-5.6.4/bin/php-config
# make && make install
Installing shared extensions:     /usr/local/php-5.6.4/lib/php/extensions/no-debug-zts-20131226/

擴展安裝完之後,還要打開php.ini文件編輯如下:

# vim /usr/local/php-5.6.4/etc/php.ini

extension=memcache.so
extension=memcached.so
extension=redis.so

 

#PHP的安全配置# 

1、控制腳本訪問許可權。由於PHP預設配置允許PHP腳本程式訪問伺服器上的任意文件,為避免PHP腳本訪問不該訪問的文件,需要設置PHP只能訪問網站目錄或其他必須可訪問的目錄。比如:

# vim /usr/local/php/etc/php.ini

open_basedir=/data/php/uploads:/data/www/proj1:/data/www/proj2

2、禁止使用PHP危險函數,這些函數都是PHP木馬常用的,比如:

# vim /usr/local/php/etc/php.ini

disable_functions = dl,assert,exec,popen,system,passthru,shell_exec,proc_close,proc_open,pcntl_exec

3、關閉註冊全局變數(PHP-5.3.*和PHP-5.4.*中已廢除)

register_globals = Off

4、開啟magic_quotes_gpc(PHP-5.3.*和PHP-5.4.*中已廢除),由於magic_quotes_gpc會把引用的數據中包含單引號'和雙引號"以及反斜線 \自動加上反斜線,自動轉譯符號,確保數據操作的正確運行,magic_quotes_gpc的設定值將會影響通過Get/Post/Cookies獲得的數據,可以有效的防止SQL註入漏洞。

magic_quotes_gpc = On

5、關閉錯誤信息提示,因為這些錯誤信息可能泄漏伺服器的路徑信息和資料庫信息等。

display_errors = Off

6、開啟錯誤日誌記錄,可以考慮跟Web伺服器的日誌放在一起,比如:

log_errors = On
error_log = /data/logs/php/php_error.log

7、禁止訪問遠程文件,因為訪問URL遠程資源使得PHP應用程式的漏洞變得更加容易被利用,關閉之,如果要訪問遠程伺服器建議採用其他方式比如libcurl庫。

allow_url_fopen = Off
allow_url_include = Off

8、開啟PHP安全模式(PHP-5.3.*和PHP-5.4.*中已廢除)

safe_mode = On

9、補上Nginx文件解析漏洞。

cgi.fix_pathinfo = 0

10、確保PHP(FastCGI)以非root許可權啟動。如果是php-cgi進程,需要su道普通用戶再啟動;php-fpm進程預設已是非root用戶進行,配置中配置即可,不能修改為root運行。比如這裡:

root     28953  0.0  1.1 196060  5736 ?        Ss   12:21   0:00 php-fpm: master process (/usr/local/php-5.6.4/etc/php-fpm.conf)
www      28954  0.0  1.0 196060  5504 ?        S    12:21   0:00 php-fpm: pool www
www      28955  0.0  1.0 196060  5504 ?        S    12:21   0:00 php-fpm: pool www
root     28974  0.0  0.1 103252   836 pts/0    S+   12:22   0:00 grep php-fpm

註:這裡只有master是root用戶許可權,其他兩個pool中的進程都是www用戶,這是正確的。

 

#PHP的性能配置#

性能配置主要是為了讓PHP能夠運行得更好,這裡很多時候需要根據業務的需求和當前系統的配置來設置,以下的配置只作為參考作用。

1、配置上傳文件大小限制(一般不超過2MB)

# vim /usr/local/php/etc/php.ini

file_uploads = On
upload_tmp_dir = /data/php/upload
upload_max_filesize = 5M
post_max_size = 8M

max_execution_time = 30
max_input_time = 60
memory_limit = 32M

2、使用阿裡雲的OCS(memcache)來代替文件作為session的存儲(這裡需要前面安裝memcached的擴展庫,並且支持SASL),比如:

# vim /usr/local/php/etc/php.ini

;session.save_handler = files
;session.save_path = "/tmp"
;session.save_path = "/data/php/session"
;session.gc_maxlifetime = 1440

session.save_handler = memcached
session.save_path = "something.m.cnszalist3pub001.ocs.aliyuncs.com:11211"
session.gc_maxlifetime = 3600

[memcached]
memcached.use_sasl = On
memcached.sess_binary = On
memcached.sess_sasl_username = "yourusername"
memcached.sess_sasl_password = "yourpassword"
memcached.sess_locking = Off
memcached.sess_prefix = "memc.sess.key."

註:使用其他的諸如memcache或redis緩存也是類似上面的配置。

阿裡雲的OCS是分散式集群統一對外提供服務,實現了負載均衡且無單點故障。對比自建Memcached最大的區別就是“賬號密碼鑒權”。因為OCS是對外提供服務的,所以需要有白名單、流控、賬號密碼鑒權等安全機制。

由於OCS實現了標準的memcached協議,採用SASL鑒權流程,這也是為什麼前面我們在添加memcached擴展的時候需要引入SASL支持。

之後可以編寫一個簡單的OCS的php代碼來進行測試,比如:

# vim ocs.php

<?php
$mem = new Memcached('ocs');
$mem->setOption(Memcached::OPT_COMPRESSION, false);
$mem->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$mem->addServer("something.m.cnszalist3pub001.ocs.aliyuncs.com", 11211);
$mem->setSaslAuthData("yourusername", "yourpassword");

$key = 'key';
$mem->set($key, 'ocs cache value');
$cache = $mem->get($key);
if (empty($cache)) {
    echo 'Oh, No!';
} else {
    echo "Thanks God, the cache value is '{$cache}'";
}
?>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在區域網內和同事共用文件的好方法 1 安裝nginx 2 創建conf文件 修改conf文件如下: 3 使配置生效 4 訪問 ...
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 前幾天在centos6.6安裝ansible時,一直提示python版本不對,導致不能安裝。只能手工進行手工安裝python,為了以後不再添這個坑,特記錄相關的安裝過程。 本文以pytho... ...
  • 尷尬的背景: 服役5年的筆記本,最近鍵盤失靈,部分鍵位徹底失去響應。最蛋疼的是左右方向鍵都不能用了 ○| ̄|_ 解決方案是,通過xmodmap命令,用其他相對雞肋些的鍵位替代方向鍵。 1 查看各個鍵位的keycode和功能 各個key的解釋可以看這裡: http://infohost.nmt.edu ...
  • CentOS 6.5 x86_64系統下安裝Subversion-1.8.11,並且根據生產環境需要,使用Apache伺服器來支持HTTP協議訪問,並且使用Nginx做了反向代理。 ...
  • "Log.io" 實時監控 php_error.log 日誌 開啟 php_error 實時監控日誌的第一步,要首先開啟 php_error 的功能。 修改 PHP 配置文件,將 改為 ,保存後重啟 Apache 或者 php fpm 服務。 安裝 nodejs 在 "官方網站" 下載 LTS 版本 ...
  • 引導載入程式是系統加電後運行的第一段代碼。我們熟悉的 PC 中的引導程式一般由BIOS(Basic Input/Output System) 和位於 MBR(Master boot record) 的 OS bootloader(例如 LILO 或者 GRUB)一起組成。然而在嵌入式系統中通常沒有像... ...
  • 你先要在192.168.1.100上開啟NFS服務並編輯/etc/exports文件: chkconfig --level 35 nfs on service nfs start vi /etc/exports,加入: /tmp 192.168.1.200(rw,sync,no_root_squas ...
  • CentOS 6.5 x86_64系統下安裝JDK-1.7,並且根據生產環境需要做了一定的配置。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...