WEB架构深度优化之PHP
一、PHP引擎缓存加速优化(4种)
1、eAccelerator
2、XCache
3、APC
4、Zend
二、使用tmpfs作为缓存加速缓存的目录(可用rc.local或fstab来自动挂载)
mount -t tmpfs -o size=16G tmpfs /dev/shm
mount –t tmps /dev/shm /tmp/eaccelerator
只要是临时目录,都可以用tmpfs,如上传图片缩略图临时处理目录和其它加速器的临时目录
三、php.ini参数调优
无论Apache还是Nginx,针对php.ini都是适合的。而php-fpm.conf适合nginx+fcgi的配置。一定是先选择产品环境的php.ini(php.ini-production),再此基础上进行下面的调优。
1、打开php的安全模式
PHP的安全模式是PHP非常重要的内嵌的安全机制,能够控制一些PHP中的函数的执行,如system()等,同时把很多文件操作的函数进行了权限控制。默认是没有打开的
该参数配置如下:
#第338行
safe_mode = Off
#修改为:
safe_mode= On
2、用户组安全
当safe_mode打开后,如果safe_mode_gid没是被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问,所以建议设置为:safe_mode_gid = off。PHP5.3.27默认为关闭,可能不用设置。
3、关闭危险函数
(1)如查打开了安全模式,那么函数禁止是可以不需要的,但是为了安全考虑,还是关闭危险函数。方法如下:
disable_functions= system,passthru,exec,shell_exec,popen,phpinfo
(2)如果要禁止任何文件和目录的操作,那么说需要关闭很多文件操作(一定要确认应用程序是否调用了这些操作)
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
4、关闭PHP版本信息在Http头中的泄漏
为了防止黑客获取服务器中PHP版本的信息,应当关闭PHP版本信息在Http头的显示。curl和telnet都不会显示PHP版本信息了。
该参数配置如下:
#第435行
expose_php = On
#修改为:
expose_php= Off
5、关闭注册全局变量
在PHP中提交的变量,包括使作POST或GET提交的变量,都将自动注为全局变量,能够直接访问,这对程序开发非常方便,但对服务器非常不安全,所以应当关闭注册全局变量。如查打开这个参数,入侵者可以通过提交一些特殊请求来绕过验证。参数register_globals默认为关闭状态,打开会非常危险
该参数配置如下:
#第435行
register_globals= Off
6、打开magic_quotes_gpc防止SQL注入
SQL注入是非常危险的问题,轻则网站后台被入侵,重则整个服务器沦陷。php.ini中的参数magic_quotes_gpc如查打开后会自动把用户提交的SQL查询进行转换,比如把单引号"'"转化为"\'"等,对防止SQL注入有重大作用。所以推荐把magic_quotes_gpc参数打开,默认是Off关闭的。
该参数配置如下:
#第756行
magic_quotes_gpc = Off
#修改为:
magic_quotes_gpc= On
7、错误信息控制
(1)关闭错误显示
一般情况下,PHP在没有连接到数据库或其它情况会提示错误,提示中会包含PHP脚本当前的路径信息或查询的SQL语句等信息,是不安全的,所以需要设置相关参数禁止错误提示。在服务器端使用错误日志代替。所以推荐把display_errors参数关闭,PHP5.3.27默认是Off关闭的。
该参数配置如下:
#第538行
display_errors= Off
(2)控制错误显示级别
如果一定要向客户端显示错误信息,则一定要设置好显示错误的级别,一般是只显示警告以上的信息。对应参数为error_reporting
该参数配置如下:
#第521行
error_reporting = E_ALL& ~E_DEPRECATED
#修改为:
error_reporting= E_WARNING & E_ERROR
(3)启用错误日志记录
建议在关闭display_errors参数后,能够把错误信息记录下来,便于查找服务器错误的原因,需要将错误记录在错误日志文件中。可以打开log_errors参数,PHP5.3.27默认是On打开的。
该参数配置如下:
#第559行
log_errors= On
(4)指定错误日志记录文件
指定error_log的路径,PHP5.3.27默认是注释掉的。指定的错误日志记录文件必须允许apache用户和组具有写权限。
该参数配置如下:
#第646行,新增一行
error_log= /app/logs/php_errors.log
8、对资源限制的参数优化
(1)设置每个脚本运行的最长时间:max_execution_time
max_execution_time是设置每个脚本运行的最长时间,可以阻止劣质脚本无休止的占用服务器资源,当无法上传较大的文件或后台备份数据经常超时,则需要调整该设置。该参数只影响脚本本身的运行时间。0表示不限制
该参数配置如下:
#第444行,默认就为30秒
max_execution_time= 30
(2)设置每个脚本使用的最大内存:memory_limit
使用memory_limit参数,必须在编译时使用--enable-memory-limit配置选项。如果要取消内存限制,则必须设置为-1。设置该参数后则memory_get_usage()函数将变为可用。
该参数配置如下:
#第465行,默认就为128M
memory_limit= 128M
(3)设置每个脚本等待输入数据的最长时间:max_input_time
max_input_time参数是指定每个脚本解析输入数据(POST、GET、upload)的最大允许时间。-1表示不限制。
该参数配置如下:
#第454行,默认60秒
max_input_time= 60
(4)设置上传文件最大许可大小:upload_max_filesize
使用upload_max_filesize参数限制上传文件的大小。可根据实际自行调整。
该参数配置如下:
#第891行,默认就为2M
upload_max_filesize= 2M
9、安全方面的参数优化
(1)禁止打开远程地址:allow_url_fopen
记得php include的那个漏洞吗?就是在一个php程序中include了变量,那么入侵者就可以利用这个控制服务器在本地执行远程的一个 php程序,例如phpshell,所以一定要关闭该参数。
该参数配置如下:
#第902行
allow_url_fopen = On
#修改为:
allow_url_fopen= Off
(2)防止Nginx文件类型错误解析漏洞:cgi.fix_pathinfo
该参数配置如下:
#第854行
;cgi.fix_pathinfo=1
#修改为:
cgi.fix_pathinfo=0
10、调整PHPSession信息存放类型和位置
(1)调整PHP Session信息存放类型和位置
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协议
(2)采有Memcache存放PHPSession的优缺点
a、优点
(i)读写速度会比普通files时快得多
(ii)可以解析多个服务器共用session的难题
b、缺点
(i)session数据都保持在memory中,持久化方面有所欠缺,但对session数据来说不是问题
(ii)也可以使用其它持久化系统存储session。如redis,ttserver
(iii)高性能高并发场景时,cookies的效率比session要好很多,因此,很多大网站都会用cookies来解决会话共享问题。
四、php-fpm.conf参数调优
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配置文件
WEB架构深度优化之PHP的更多相关文章
- 四十二、LAMP与LNMP web架构深度优化实战-第一部
1.nginx.conf配置文件基本参数优化 1.1 隐藏nginx header内版本号信息 一些特定的系统及服务漏洞一般都和特定的软件版本号有关,我们应尽量隐藏服务器的敏感信息(软件名称及版本等信 ...
- 四十三、LAMP与LNMP web架构深度优化实战-第二部
1. 配置nginx gzip压缩功能 服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...
- 从架构层面谈web加载优化(个人整理)
最近听了阿里一位大牛的讲座,讲web架构优化对网页加载的影响,看完之后对他所讲的一些优化方法进行一些总结和整理,发现收获还是蛮多的,下面多为个人整理和个人见解,希望有说的不对的,能及时指出 1.DNS ...
- 大型网站技术架构(3):WEB 前端性能优化
上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...
- 网站的高性能架构---Web前端性能优化
网站性能测试 不同视角下的网站性能 用户视角的网站性能:从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度.用户的感受时间包括用户计算机和网站服务器通信的时间.网站服务器处理请求时间.用户 ...
- WEB架构师成长之路-架构师都要懂哪些知识 转
Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...
- 深度优化LNMP之Nginx [2]
深度优化LNMP之Nginx [2] 配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍 Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求 ...
- WEB架构师成长之路之三-架构师都要懂哪些知识
Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...
- 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化
作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...
随机推荐
- 跟Excel说拜拜,这款可视化报表制作工具入股不亏!
相信很多人如果看到漂亮的图表都会很感叹,"为什么可以做的这么漂亮,这么好看?","这个应该怎么做呢?用什么工具可以实现呢?".制作漂亮的可视化一般有这样几个方 ...
- 「Excel实用技巧」拿下这个报表工具,轻松给报表加水印!
水印报表是什么?怎么给excel表格加水印? 许多时候,为了防止报表被盗.保护信息安全和保护版权,采用水印能够有效实现该需求.水印是为了防止报表被盗.进行真伪鉴别.版权保护等,而在报表中添加半透明的图 ...
- 你真的会做数据分析吗?如果不会我推荐思迈特软件Smartbi
你是否还在被以下问题所困扰? 辛苦辛苦地拿到了一堆数据,却不知道从何下手分析? 因为不会统计数据分析伤透脑筋,而打消考博的梦想? 数据分析求助无门,涌现出想要放弃学位的念头? 突然开天眼般的想到了一个 ...
- 反编译C#代码来看看闭包到底是什么
原文地址:https://zhuanlan.zhihu.com/p/3161634 C#的闭包,是一个语法糖. 它实质上是将匿名函数转换成一个类,函数作为其中的类方法,并调整外部调用代码来实现的.既然 ...
- CultureInfo、DateTimeFormatInfo、NumberFormatinfo之间的关系
CultureInfo.DateTimeFormatInfo.NumberFormatinfo之间的关系 线程中CurrentCulture和CurrentUICulture 区别 以下是win10操 ...
- 教程1--安装Git软件
在https://git-scm.com/下载git for windows,双击安装即可. (1)单击Next (2)选择安装目录 (3)勾选创建桌面快捷方式.Git Bash.Git GUi.已经 ...
- linux配置vnc server,并用vnc viewer连接server
做过Linux运维的朋友都知道,我们一般很少直接与服务器接触.都是通过终端来连接处理一些事物. 本人常用的终端有图形界面的是vnc viewer还有命令行界面xshell,当然各有千秋,喜欢使用哪个都 ...
- package.xml使用说明
1. package.xml使用说明 a. pacakge.xml 包含了package的名称. 版本号. 内容描述. 维护人员. 软件许可. 编译构建工具. 编译依赖. 运行依赖等信息. 2. pa ...
- MySQL第一讲概论
MySQL 后期内容 Python 今日内容概要 MySQL的概念 数据库软件的安装及使用 配置文件介绍 数据库常用命令(库操作.表操作.记录操作) 今日内容详细 什么是数据库 1.单机游戏 本地保存 ...
- 系统整理qt笔记3
qtcreator中不能输入中文: https://blog.csdn.net/qq_15725099/article/details/97305507 main.cpp #include " ...