一、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的更多相关文章

  1. 四十二、LAMP与LNMP web架构深度优化实战-第一部

    1.nginx.conf配置文件基本参数优化 1.1 隐藏nginx header内版本号信息 一些特定的系统及服务漏洞一般都和特定的软件版本号有关,我们应尽量隐藏服务器的敏感信息(软件名称及版本等信 ...

  2. 四十三、LAMP与LNMP web架构深度优化实战-第二部

    1. 配置nginx gzip压缩功能    服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...

  3. 从架构层面谈web加载优化(个人整理)

    最近听了阿里一位大牛的讲座,讲web架构优化对网页加载的影响,看完之后对他所讲的一些优化方法进行一些总结和整理,发现收获还是蛮多的,下面多为个人整理和个人见解,希望有说的不对的,能及时指出 1.DNS ...

  4. 大型网站技术架构(3):WEB 前端性能优化

    上次说到了性能优化策略,根据网站的分层架构,可以大致的分为 web 前端性能优化,应用服务器性能优化,存储服务器性能优化三大类 这次来说一下 web 前端性能优化,一般来说,web 前端就是应用服务器 ...

  5. 网站的高性能架构---Web前端性能优化

    网站性能测试 不同视角下的网站性能 用户视角的网站性能:从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度.用户的感受时间包括用户计算机和网站服务器通信的时间.网站服务器处理请求时间.用户 ...

  6. WEB架构师成长之路-架构师都要懂哪些知识 转

    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...

  7. 深度优化LNMP之Nginx [2]

    深度优化LNMP之Nginx [2]   配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍        Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求 ...

  8. WEB架构师成长之路之三-架构师都要懂哪些知识

    Web架构师究竟都要学些什么?具备哪些能力呢?先网上查查架构师的大概的定义,参见架构师修炼之道这篇文章,写的还不错,再查查公司招聘Web架构师的要求. 总结起来大概有下面几点技能要求: 一. 架构师有 ...

  9. 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

    作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...

随机推荐

  1. 跟Excel说拜拜,这款可视化报表制作工具入股不亏!

    ​相信很多人如果看到漂亮的图表都会很感叹,"为什么可以做的这么漂亮,这么好看?","这个应该怎么做呢?用什么工具可以实现呢?".制作漂亮的可视化一般有这样几个方 ...

  2. 「Excel实用技巧」拿下这个报表工具,轻松给报表加水印!

    水印报表是什么?怎么给excel表格加水印? 许多时候,为了防止报表被盗.保护信息安全和保护版权,采用水印能够有效实现该需求.水印是为了防止报表被盗.进行真伪鉴别.版权保护等,而在报表中添加半透明的图 ...

  3. 你真的会做数据分析吗?如果不会我推荐思迈特软件Smartbi

    你是否还在被以下问题所困扰? 辛苦辛苦地拿到了一堆数据,却不知道从何下手分析? 因为不会统计数据分析伤透脑筋,而打消考博的梦想? 数据分析求助无门,涌现出想要放弃学位的念头? 突然开天眼般的想到了一个 ...

  4. 反编译C#代码来看看闭包到底是什么

    原文地址:https://zhuanlan.zhihu.com/p/3161634 C#的闭包,是一个语法糖. 它实质上是将匿名函数转换成一个类,函数作为其中的类方法,并调整外部调用代码来实现的.既然 ...

  5. CultureInfo、DateTimeFormatInfo、NumberFormatinfo之间的关系

    CultureInfo.DateTimeFormatInfo.NumberFormatinfo之间的关系 线程中CurrentCulture和CurrentUICulture 区别 以下是win10操 ...

  6. 教程1--安装Git软件

    在https://git-scm.com/下载git for windows,双击安装即可. (1)单击Next (2)选择安装目录 (3)勾选创建桌面快捷方式.Git Bash.Git GUi.已经 ...

  7. linux配置vnc server,并用vnc viewer连接server

    做过Linux运维的朋友都知道,我们一般很少直接与服务器接触.都是通过终端来连接处理一些事物. 本人常用的终端有图形界面的是vnc viewer还有命令行界面xshell,当然各有千秋,喜欢使用哪个都 ...

  8. package.xml使用说明

    1. package.xml使用说明 a. pacakge.xml 包含了package的名称. 版本号. 内容描述. 维护人员. 软件许可. 编译构建工具. 编译依赖. 运行依赖等信息. 2. pa ...

  9. MySQL第一讲概论

    MySQL 后期内容 Python 今日内容概要 MySQL的概念 数据库软件的安装及使用 配置文件介绍 数据库常用命令(库操作.表操作.记录操作) 今日内容详细 什么是数据库 1.单机游戏 本地保存 ...

  10. 系统整理qt笔记3

    qtcreator中不能输入中文: https://blog.csdn.net/qq_15725099/article/details/97305507 main.cpp #include " ...