1.1 php引擎緩衝最佳化加速
1)eaccelerator
2)Zend
3)xcache
1.2 使用tmpfs作為緩衝加速的的檔案目錄
[root@LNMP ~]# mount -t tmpfs /dev/shm -o size=256m
[root@LNMP ~]# mount -t tmpfs /dev/shm/ /tmp/eaccelerator/
提示:
1、上傳圖片縮圖處理的目錄
2、其他加速器臨時目錄,例如tmp/eaccelerator
1.3 php.ini參數調優
無論是Apache還是nginx,php.ini都適合的,而php-fpm.conf適合nginx+fcgi的配置。首先選擇的產品環境的php.ini(php.ini-production)
/home/oldboy/tools/php-5.3.27/php.ini-development
/home/oldboy/tools/php-5.3.27/php.ini-production
1.3.1 開啟php的安全模式
php的安全模式是個非常重要的php內嵌的安全機制,能夠控制一些php中的函數執行,比如system(),同時把很多檔案操作的函數進行了許可權控制。
該參數配置如下:
safe_mode = Off
;是否啟用安全模式。
;開啟時,PHP將檢查當前指令碼的擁有者是否和被操作的檔案的擁有者相同,
1.3.3關閉危險函數
如果開啟了安全模式,那麼函數禁止是可以不需要的,但是為了安全還是考慮進去,比如,我們覺得不希望執行包括system()等在那的能夠執行命令的php函數,或者能夠查看php資訊的phpinfo()等函數,那麼我們就可以禁止他們,方法如下:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
如果你要禁止任何檔案和目錄的操作,那麼可以關閉很多檔案操作
disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown
以上只是列出了部分不叫常用的檔案處理函數,你可以把以上執行命令函數和這個函數結合,就能夠抵制大部分phpshell了,該參數預設為disable_functions =
1.3.4 關閉PHP版本資訊在http頭中的泄露
我們為了防止駭客擷取伺服器php版本資訊,可以關閉資訊在http頭中。該參數預設配置如下:
expose_php = On
;是否暴露php被安裝在伺服器上的事實(在http頭中添加上其標籤)
;它不會有安全上的直接威脅,但是它使得用戶端知道伺服器上安裝了php
建議設定為:
expose_php = Off
這樣駭客執行Telnet ucode.blog.51cto.com 80 的時候,那麼將無法看到php的資訊
1.3.6 開啟 magic_quotes_gpc來防止SQL注入
SQL注入是非常危險的問題,輕則網站後台被入侵,重則整個伺服器淪陷。
所以一定要小心。php.ini中有一個設定:
magic_quotes_gpc = Off
這個預設是關閉的,如果它開啟後將自動把使用者提交對sql的查詢進行轉換,比如把'轉換為\'等,這對防止sql注入有重大作用,所以我們推薦設定為:
magic_quotes_gpc = Off
1.3.7錯誤資訊控制
一般的php在沒有串連到資料庫或者其他情況下會提示錯誤,一般的錯誤資訊會包含php指令碼當前的路徑資訊或者查詢的SQL語句等資訊,這類資訊提供給駭客後,是不安全的,所以一般伺服器建議禁止錯誤提示:
display_errors = Off
1.3.8錯誤記錄檔
建議在關閉display_errors後能夠把錯誤資訊記錄下來,便於尋找伺服器啟動並執行原因:
log_errors = On
同時也要設定錯誤記錄檔存放的目錄,建議跟Apache的日誌存放在一起:
error_log = /app/logs/php_error.log
注意:給檔案必須允許Apache使用者和組都具有寫的許可權
1.3.9 部分資源限制參數最佳化
1.3.9.1 設定每個指令碼啟動並執行最長時間
當無法上傳較大的檔案或者後台備份資料經常逾時,此時需要調整如下設定:
max_exxcution_time = 30
;每個指令碼最大允許執行時間(秒),0表示沒有限制
;這個參數有助於阻止劣質指令碼無休止的佔用伺服器資源
;該指令僅影響指令碼本身的已耗用時間,任何其他花費在指令碼運行之外的時間
;如用system()/sleep()函數的使用、資料庫查詢、檔案上傳等,都不包括在內。
;在安全模式下,你不能用ini_set()在運行時改變這個設定
1.3.9.2 每個指令碼使用的最大記憶體
memory_limit = 128M
;一個指令碼所能夠申請到的最大記憶體位元組數(可以使用K和M作為單位)
;這有助於阻止劣質指令碼無休止的佔用伺服器上的所有記憶體
;要能夠使用該指令必須在編譯時間使用"--enable-memory-limit"配置選項
;如果要取消記憶體限制,則必須將其設定為-1
;設定了該指令後,memory_get_usage()函數將變為可用
1.3.9.3 每個指令碼等待輸入資料最長時間
max_input_time = -1
;每個指令碼解析輸入資料(POST,GET,upload)的最大允許時間(秒)
;-1表示不限制
設定為:
max_input_time = 60;
1.3.9.4 上傳檔案的最大許可大小
當上傳檔案較大時,需要調整如下參數:
upload_max_filesize = 2M;
;上傳檔案的最大許可大小,自己定義,一般圖片論壇需要將這個值修改較大,預設2M
另外通過一個請求可以上傳多少個檔案
max_file_uploads = 20
1.3.10 部分安全參數最佳化
1、禁止開啟遠程地址,記得最近出的php include的那個漏洞麼,就是在一個php程式中include了變數,那麼入侵者就可以利用這個控制伺服器在本地執行遠端一個php程式。例如phpshell,所以我們要關閉這個
allow_url_fopen = Off
2、設定:cgi.fix_pathinfo = 0
;防止Nginx檔案類型錯誤解析漏洞
1.3.11 調整php session 資訊存放類型和位置
session.save_handler = files
;儲存和檢索與會話關聯的資料的處理器名字,預設為檔案("files")
;如果想要使用自訂的處理器(如基於資料庫的處理器),可用"user"
;設為"memcache"則可以使用memcache作為會話處理器(需要指定"--enable-memcache-session"編譯選項)。
; session.save_path = "/tmp"
;傳遞給儲存處理器的參數,對於files處理器,此值是建立會話資料檔案的路徑。
web 叢集session共用儲存設定:
預設php.ini中session的類型和配置路徑:
#session.save_handler = files
#session.save_path = "/tmp"
修改成如下配置:
session.save_handler = memcache
session.save_path = "tcp://10.0.0.18:11211"
提示:
1)10.0.0.18:11211為memcache資料庫緩衝的IP及連接埠
2)上述適合LAMP、LNMP環境
3)memcache伺服器也可以是多台通過hash調度