有這麼一個工具,能夠檢查ini文件是否使用了安全方面的最佳實踐php
composer require psecio/iniscan htps://github.com/psecio/iniscan
php.ini中的memory_limit
設定單個PHP進程可使用的系統內存最大值。nginx
一共能分配給PHP多少內存?git
512MB是絕對足夠的。可是仍是要看具體狀況。github
單個PHP進程平均消耗多少內存?redis
能夠在命令行中執行top
命令看查看運行中的進程的實時統計數據。緩存
另外,能夠在PHP腳本的最後調用memory_get_peak_usage()
輸出當前腳本小號的最大內存量。安全
能負擔起多少個PHP-FPM進程?session
平均每一個php進程要消耗15MB內存。根據分配的內存總量memory_limit
來估算進程數。composer
該擴展用於緩存操做碼。memcached
先來分析每次HTTP請求時一般是如何處理PHP腳本的。
首先,nginx把HTTP請求轉發給PHP-FPM,PHP-FPM再把請求交給某個PHP子進程處理。PHP進程找到相應的php腳本,讀取腳本,把php腳本編譯成操做碼,而後執行編譯獲得的操做碼,生成響應,發給nginx。
咱們能夠緩存編譯php腳本獲得的操做碼,直接從緩存中讀取並執行編譯好的操做碼。
個人php.ini中opcache的配置
opcache.memory_consumption = 64 opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 4000 opcache.validate_timestamps = 1 opcache.revalidate_freq = 0 opcache.fast_shutdown = 1
opcache.memory_consumption = 64
爲緩存分配的內存量。根據應用大小來決定。
opcache.interned_strings_buffer = 16
用來存儲駐留字符串的內存量。
什麼是駐留字符串?PHP解釋器在背後會找到相同字符串的多個實例,把這個字符串保存在內存中,若是再次使用相同的字符串,php解釋器會使用指針。默認狀況下,php駐留的字符串會隔離在各個php進程中。
這個設置能讓php-fpm進程池中全部進程把駐留字符串存儲到共享的緩衝區中,以便在php-fpm進程池中的多個進程之間引用駐留字符串。
opcache.max_accelerated_files = 4000
操做碼緩存中最多能存儲的php腳本個數,必定要比應用中文件數量大。
opcache.validate_timestamps = 1
檢查php腳本的內容是否有變化。值爲0則不檢查。
file_uploads = 1 upload_max_filesize = 10M max_file_uploads = 3
在配置上傳很是大的文件時,對nginx的
client_max_body_size
也要修改
max_execution_time = 5 // s
也可使用set_time_limit()
來覆蓋
php的會話處理程序會把會話數據存儲在硬盤中。其實可使用memcached或redis存儲在內存中。
安裝鏈接memcached的PECL擴展來使用memcahced
http://pecl.php.net/package/memcached
修改配置
session.save_handler = 'memcached' session.save_path = '127.0.0.2:11211'
緩衝輸出的目的:在較少的塊中發送較多的數據
output_buffering = 4096 implicit_flush = false
確保輸出大小是4或8的倍數
PHP會緩存應用使用的文件路徑,這樣每次包含或倒入文件時就不須要不斷搜索路徑了。
這個緩存叫真實路徑緩存
。
realpath_cache_size = 64k
在腳本末尾能夠叫上print_r(realpath_cache_size())得到真實的路徑緩存使用大小。
參考
Modern PHP