Linux运维学习笔记之十八:WEB架构深度优化之PHP

第二十九章 WEB架构深度优化之PHP

一、PHP引擎缓存加速优化(4种)
1eAccelerator
2XCache
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" #memcacheIP和端口,采用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配置文件

Webadmin!是一个免费的开源框架,用于为Linux系统的快速搭建统一、稳定、易用的Web管理系统。 WebAdmin系统由三部分组成:WEB图形用户接口、WebAdmin守护进程和进程监视程序。Web图形用户接口(WebGUI)是WebAdmin系统的前端部分,为用户提供一个统一、易操作的图形界面。WebAdmin守护进程 (WebAdmind)是WebAdmin系统的后台部分,实时监视WebGUI生成的配置文件,并根据配置文件的变化情况,启动或停止相应的服务进程,WebAdmin进程监视程序(DaemonWatcher)用于实时监视WebAdmind启动的服务进程的运行状况,一旦发现启动的服务进程异常中止,立即重启中止的服务进程,从而确保系统可靠稳定运行。 WebAdmin!提供了一个结构化的WebAdmin开发框架,它的前后台部分均采用插件式的程序开发方法,借助提供的插件开发模板,WebAdmin系统开发者不必关WebAdmin开发框架的具体实现,就可设计出界面统一、操作简单、安全稳定的WebGUI界面。与WebGUI相对应,Webadmind也是采用插件式的程序开发方法。WebAdmind插件与WebGUI插件一一对应完成对界面操作的响应。DaemonWatcher是一个独立的进程监视程序,是为确保WebAdmind启动的进程能够不可间断地提供服务,一旦发现被监视程序发生异常中止,DaemonWatcher将根据进程的启动脚本立即启动被中止进程。 WebAdmin是一个用C语言设计的易用的图形用户接口开发框架,C语言的高可移植性使得WebAdmin可以广泛应用于包括Linux、Unix、Windows及各种嵌入式操作系统中,编译WebAdmin系统除Libxml2库处不需要额外的C函数库支持。WebAdmin提供了丰富的API函数,开发者可以根据自己的需要定制个性化的WebAdmin系统。 WebAdmin系统的界面风格也可以自己定制,对于OEM厂商可以根据需要修改界面风格,满足定制要求。 WebAdmin的开放设计思想,为WebAdmin系统的不断发展普奠定了基础,无数开发者提供了开源插件模块,用户甚至不用写一行代码就可根据自己的需要设计WebAdmin系统。 【简单使用方法】:下载后将压缩文件上传到Linux系统中,用tar xvfz webadmin-devel-1.3.tar.gz解压,解压后进入webadmin-devel目录,执行./configure,make命令后将会在test/webui目录下生成一个webadmin.cgi文件,将此文件拷贝到apache下的WEB根目录下cgi-bin目录下即可,为测试webadmin.cgi,还需将htdocs目录下的文件拷贝到apache的WEB根目录下,将etc目录中的所有文件拷贝到根目录下的etc中,最后用浏览器访问你的apache Web服务器即可看到Linux系统的WEB管理界面。 【说明】:编译此源码需要libxml2库的支持 有技术问题可以访问官方网站:http://www.webadminc.com,联系电话:13311223928
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值