PHP引擎缓存优化加速
- eaccelerator
- zend opcode
- xcache
使用tmpfs作为缓存加速缓存的文件目录
|
|
利用好tmpfs
1.上传目录缩略图临时处理目录/tmp.
2.其他加速器临时目录/tmp/eaccelerator/
php.ini参数优化
无论是 apache 还是 nginx,php.ini都是适合的。而 php-fpm.conf 适合nginx。而php-fpm.conf更适合 nginx+fcgi 的配置。首选选择产品环境的 php.ini
- 开发场景:development
- 生产环境:production
打开php的安全模式
php的安全模式是个非常重要的php内嵌的安全机制,能够控制一些php中的函数执行,比如system()
,同时把很多文件操作的函数进行了权限控制。php5.4后弃用
该参数配置如下:
|
|
用户和安全组
当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。建议设置为safe_mode_gid=off;
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。php5.3默认为 safe_mode_gid=off;
(新版弃用)
关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括 system()
等在那的能够执行命令的php函数,或者能够查看php信息的 phpinfo()
等函数,那么我们就可以禁止他们,方法如下:
|
|
如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作。
|
|
以上只列出部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够地址大部分的phpshell了。该参数默认为 disable_functions=
.
关闭PHP版本信息在http头中的泄露
为了防止黑客获取服务器中php版本信息,可以关闭该信息泄露在http头中,该参数默认如下:
|
|
建议设置为Off,这样当黑客抓取头信息时,无法看到PHP的信息。
关闭注册全局变量
在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭(5.4弃用)
|
|
打开magic_quotes_gpc来防止SQL注入
SQL注入是非常危险的问题,轻则网站后台被入侵,重则整个服务器沦陷,php.ini 有一个设置,5.4已移除
错误信息控制
一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息会包含php脚本当前距离信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示
|
|
设置为
|
|
如果你确实要显示错误信息,一定要设置显示错误级别,比如只显示警告以上的信息,当然最好是关闭错误提示
|
|
错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:
|
|
同时也要设置错误日志存放的目录,建议和Web日志存放在一起.
|
|
部分资源限制参数优化
设置每个脚本运行的最长时间
当无法上传较大的文件或者后台备份数据经常超时,此时需要调整如下设置:
|
|
每个脚本使用的最大内存
|
|
每个脚本等待输入数据最长时间
|
|
设置为
|
|
上载文件的最大许可大小
当上传较大文件时,需要调整如下参数:
|
|
详情:http://php.net/upload-max-filesize
部分安全参数优化
禁止打开远程地址
记得最近出的 php include
的那个漏洞吗?就是在一个php程序中include变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell,所以我们关闭这个。
|
|
详情:http://php.net/allow-url-fopen
测试远程allow_url_include
|
|
|
|
运行结果
测试远程allow_url_fopen
本地读取远端文件的脚本文件内容如下:
|
|
执行脚本结果如下:
|
|
当在禁止后,再重新运行以上脚本文件会报如下错误
|
|
调整php session信息存放类型和位置
|
|
web集群session贡献存储设置,默认php.ini中session的类型和配置路径:
|
|
PHP-FPM参数优化
如果你的高负载网站使用PHP-FPM管理FastCGI,也许下面这些技巧对你有用
尽量少安装PHP模块,最简单是最好(快)的
把你的PHP FastCGI子进程数调到100或以上,在4G内存的服务器上200就可以(建议压力测试来得出自己服务器合理的值)
socket连接FastCGI,/dev/shm是内存文件系统,socket放在内存中肯定会快些
Linux下增加文件打开数,命令如下:
text1 2
; 增加 PHP-FPM 打开文件描述符的限制,此参数和php-fpm进程数有关 rlimit_files = 51200
使用php代码加速器,例如 eAccelerator, XCache.在Linux平台上可以把
cache_dir
指向/dev/shm
php-fpm.conf重要优化参数详解:
|
|
一般 php-fpm 进程占用20~30m左右的内存就按 30m 算。如果单独跑 php-fpm,动态方式起始值可设置物理内存 $\frac{Mem}{30M}$,由于大家一般Nginx, MySQL都在一台机器上,于是预留一半给它们,即php-fpm进程数为 $\frac{mem}{2\times30M}$。
Reference
https://jingyan.baidu.com/article/fdbd4277c4dacbb89f3f4855.html