无论是apache还是nginx,php.ini都是合适的。而php-fpm.conf适合nginx+fcgi的配置。
1)打开PHP的安全模式
PHP的安全模式是个非常重要的PHP内嵌的安全机制,能够控制一些PHP中的函数执行, 比如system(),同时把很多文件操作的函数进行了权限的控制。 safe_mode = Off 打开时,PHP将检查当前脚本的拥有者是否和被操作的文件的拥有者相同 safe_mode = On
2)用户组安全
当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。建议设置为:safe_mode_gid = Off
如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。php5.3.27默认为Off
3)关闭危险函数
如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全考虑,,比如,我们觉得不希望执行包括system()等在那的能够执行命令的PHP函数,或者能够查看PHP
信息的phpinfo()等函数,那么我们可以禁止它们:
disable_functions = system,passthru,exec,shell_exec,popen,phpinfo
4)关闭PHP版本信息在http头中的泄漏
expose_php = On
建议设置为:safe_mode_gid
expose_php = Off
5)关闭注册全局变量
在php中提交的变量,包括使用post或者get提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的
register_globals = Off
6)防止sql注入
magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把‘转为\‘等,这对防止sql注入有重大作用
magic_quotes_gpc = On
7)错误信息控制
display_errors = Off
如果你确实是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息
error_reporting
8)错误日志
建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因
log_errors = On
同时也要设置错误日志存放的目录,建议跟apache的日志存放在一起
error_log = /app/logs/php_error.log
文件必须允许apache用户的和组具有写的权限。
9)部分资源限制参数优化
9.1)设置每个脚本运行的最长时间
当无法上传较大的文件或者后台备份数据经常超时:
max_execution_time = 30
每个脚本最大允许执行时间(秒),0表示没有限制。
这个参数有助于阻止劣质脚本无休止的占用服务器资源。
该指令仅影响脚本本身的运行时间,任何其他花费在脚本运行之外的时间。
如用system()/sleep()函数的使用、数据库查询、文件上传等,都不包括在内。
在安全模式下,你不能用ini_set()在运行时改变这个设置。
9.2)每个脚本使用的最大内存
memory_limit = 128M
一个脚本所能够申请到的最大内存字节数(可用使用K和M作为单位)。
这有助于防止劣质脚本消耗完服务器上的所有内存。
要能够使用该指令必须在编译时使用“--enable-memory-limit”配置选项。
如果要取消内存限制,则必须将其设为-1。
设置了该指令后,memory_get_usage()函数将变为可用。
9.3)每个脚本等待输入数据最长时间
max_input_time = -1
每个脚本解析输入数据(POST,GET,upload)的最大允许时间(秒)
-1表示不限制
设置为:
max_input_time = 60
9.4)上载文件的最大许可大小
当上传较大文件时,需要调整如下参数:
upload_max_filesize = 2M;
上载文件的最大许可大小,自己改吧,一些图片论坛需要这个更大的值。
10)部分安全参数优化
10.1)禁止打开远程地址,php include的那个漏洞,就是在一个php程序中include了变量
,那么入侵者就可以利用这个控制服务器在本地执行远程的一个php程序,例如phpshell
所以要关闭
allow_url_fopen = Off
10.2)防止Nginx文件类型错误解析漏洞
cgi.fix_pathinfo=0
11)调整php sesson信息存放类型和位置
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://192.168.1.1:1234"
提示:
1)192.168.1.1:1234为memcached数据库缓存的ip及端口。
2)上述适合lnmp,lamp环境。
3)memcached服务器也可以是多台通过hash调度。
关于php-fpm的参数调优,可以查看本机里面的文件。
pid = /app/logs/php-fpm.pid
error_log = /app/logs/php-fpm.log
log_level = error
rlimit_files = 32768
events.mechanism = epoll
listen.owner = nginx
listen.group = nginx
pm.max_children = 1024
pm.start_servers = 16
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
;access.format = %R - %u %t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%
slowlog = /app/logs/$pool.log.slow
request_slowlog_timeout = 10
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]