mount -t tmpfs -o size=16G tmpfs /dev/shmphp
mount –t tmps /dev/shm /tmp/eacceleratorhtml
只要是臨時目錄,均可以用tmpfs,如上傳圖片縮略圖臨時處理目錄和其它加速器的臨時目錄nginx
不管Apache仍是Nginx,針對php.ini都是適合的。而php-fpm.conf適合nginx+fcgi的配置。必定是先選擇產品環境的php.ini(php.ini-production),再此基礎上進行下面的調優。redis
PHP的安全模式是PHP很是重要的內嵌的安全機制,可以控制一些PHP中的函數的執行,如system()等,同時把不少文件操做的函數進行了權限控制。默認是沒有打開的算法
該參數配置以下:shell
#第338行數據庫
safe_mode = Offapache
#修改成:緩存
safe_mode= On安全
當safe_mode打開後,若是safe_mode_gid沒是被關閉,那麼php腳本可以對文件進行訪問,並且相同組的用戶也可以對文件進行訪問,因此建議設置爲:safe_mode_gid = off。PHP5.3.27默認爲關閉,可能不用設置。
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
爲了防止黑客獲取服務器中PHP版本的信息,應當關閉PHP版本信息在Http頭的顯示。curl和telnet都不會顯示PHP版本信息了。
該參數配置以下:
#第435行
expose_php = On
#修改成:
expose_php= Off
在PHP中提交的變量,包括使做POST或GET提交的變量,都將自動注爲全局變量,可以直接訪問,這對程序開發很是方便,但對服務器很是不安全,因此應當關閉註冊全局變量。如查打開這個參數,入侵者能夠經過提交一些特殊請求來繞過驗證。參數register_globals默認爲關閉狀態,打開會很是危險
該參數配置以下:
#第435行
register_globals= Off
SQL注入是很是危險的問題,輕則網站後臺被入侵,重則整個服務器淪陷。php.ini中的參數magic_quotes_gpc如查打開後會自動把用戶提交的SQL查詢進行轉換,好比把單引號"'"轉化爲"\'"等,對防止SQL注入有重大做用。因此推薦把magic_quotes_gpc參數打開,默認是Off關閉的。
該參數配置以下:
#第756行
magic_quotes_gpc = Off
#修改成:
magic_quotes_gpc= On
通常狀況下,PHP在沒有鏈接到數據庫或其它狀況會提示錯誤,提示中會包含PHP腳本當前的路徑信息或查詢的SQL語句等信息,是不安全的,因此須要設置相關參數禁止錯誤提示。在服務器端使用錯誤日誌代替。因此推薦把display_errors參數關閉,PHP5.3.27默認是Off關閉的。
該參數配置以下:
#第538行
display_errors= Off
若是必定要向客戶端顯示錯誤信息,則必定要設置好顯示錯誤的級別,通常是隻顯示警告以上的信息。對應參數爲error_reporting
該參數配置以下:
#第521行
error_reporting = E_ALL& ~E_DEPRECATED
#修改成:
error_reporting= E_WARNING & E_ERROR
建議在關閉display_errors參數後,可以把錯誤信息記錄下來,便於查找服務器錯誤的緣由,須要將錯誤記錄在錯誤日誌文件中。能夠打開log_errors參數,PHP5.3.27默認是On打開的。
該參數配置以下:
#第559行
log_errors= On
指定error_log的路徑,PHP5.3.27默認是註釋掉的。指定的錯誤日誌記錄文件必須容許apache用戶和組具備寫權限。
該參數配置以下:
#第646行,新增一行
error_log= /app/logs/php_errors.log
max_execution_time是設置每一個腳本運行的最長時間,能夠阻止劣質腳本無休止的佔用服務器資源,當沒法上傳較大的文件或後臺備份數據常常超時,則須要調整該設置。該參數隻影響腳本自己的運行時間。0表示不限制
該參數配置以下:
#第444行,默認就爲30秒
max_execution_time= 30
使用memory_limit參數,必須在編譯時使用--enable-memory-limit配置選項。若是要取消內存限制,則必須設置爲-1。設置該參數後則memory_get_usage()函數將變爲可用。
該參數配置以下:
#第465行,默認就爲128M
memory_limit= 128M
max_input_time參數是指定每一個腳本解析輸入數據(POST、GET、upload)的最大容許時間。-1表示不限制。
該參數配置以下:
#第454行,默認60秒
max_input_time= 60
使用upload_max_filesize參數限制上傳文件的大小。可根據實際自行調整。
該參數配置以下:
#第891行,默認就爲2M
upload_max_filesize= 2M
記得php include的那個漏洞嗎?就是在一個php程序中include了變量,那麼入侵者就能夠利用這個控制服務器在本地執行遠程的一個 php程序,例如phpshell,因此必定要關閉該參數。
該參數配置以下:
#第902行
allow_url_fopen = On
#修改成:
allow_url_fopen= Off
該參數配置以下:
#第854行
;cgi.fix_pathinfo=1
#修改成:
cgi.fix_pathinfo=0
PHP Session默認是以文件類型放在/tmp目錄下的。若是是負載均衡+WEB集羣的架構,則Session會話保持將會是一個問題,解決辦法一是在負載均衡端使用Hash算法,將會話始終發送到一臺Web服務器上;二是採用緩存服務器(Memcache、Redis)存放全部Session會話,訪問時到緩存服務器上調取Session會話,達到Session會話保持的做用
該參數配置以下:
#第1461行
session.save_handler =files
#修改成:
session.save_handler= memcache
#第1490行
;session.save_path ="/tmp"
#修改成:
session.save_path= "tcp://10.0.0.18:11211" #memcache的IP和端口,採用tcp協議
a、優勢
(i)讀寫速度會比普通files時快得多
(ii)能夠解析多個服務器共用session的難題
b、缺點
(i)session數據都保持在memory中,持久化方面有所欠缺,但對session數據來講不是問題
(ii)也可使用其它持久化系統存儲session。如redis,ttserver
(iii)高性能高併發場景時,cookies的效率比session要好不少,所以,不少大網站都會用cookies來解決會話共享問題。
pm.max_children= 1024 #子進程的最大數量
pm.start_servers= 16 #啓動時的進程數量
pm.min_spare_servers= 5 #最小空間進程數
pm.max_spare_servers= 20 #最大空間進程數
pm.max_requests= 2048 #擴大每一個子進程的最大請求數
slowlog= /application/php/logs/$pool.log.slow #指定慢查詢的記錄日誌
request_slowlog_timeout= 10 #指定請求超時參數
詳細設置見第二十四章第3大點PHP的fpm配置的第2小點修改php-fpm配置文件