php-fpm 的slow.log
本帖隐藏的内容需要积分高于 10 才可浏览
攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表. 这个攻击方法危害很高, 攻击成本也很小. 一个台式机可以轻松搞垮数十台, 上百台服务器. 实例: $size = pow(2, 16); // 16 is just an example, could also be 15 or 17 $startTime = microtime(true); $array = array(); for ($key = 0, $maxKey = ($size - 1) * $size; $key <= $maxKey; $key += $size) { $array[$key] = 0; } $endTime = microtime(true); echo 'Inserting ', $size, ' evil elements took ', $endTime - $startTime, ' seconds', "\n"; $startTime = microtime(true); $array = array(); for ($key = 0, $maxKey = $size - 1; $key <= $maxKey; ++$key) { $array[$key] = 0; } $endTime = microtime(true); echo 'Inserting ', $size, ' good elements took ', $endTime - $startTime, ' seconds', "\n"; https://github.com/laruence/laru ... -5.2-max-input-vars 另外, 其他语言java, ruby等, 请各位也预先想好对策, 限制post_size是治标不治本的方法, 不过可以用来做临时解决方案. 参考文章: http://nikic.github.com/2011/12/ ... ng-a-PHP-array.html http://www.laruence.com/2011/12/30/2440.html php.ini 中禁止一些函数,增加安全性# vi /usr/local/php/etc/php.ini找到: disable_functions = 设置为: passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server Nginx中禁止访问.txt文件location ~* \.(txt|doc)$ {if (-f $request_filename) { root /home/domain/public_html/test; break; } } Nginx出现413 Request Entity Too Large处理Nginx出现的413 Request Entity Too Large错误这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx.conf,找到http{}段,添加 client_max_body_size 8m; 重新加载nginx的配置 nginx -t kill -HUP nginx_pid 要是跑php的话这个大小client_max_body_size要和php.ini中的如下值的最大值一致或者稍大,这样就不会因为提交数据大小不一致出现的错误。 post_max_size = 8M upload_max_filesize = 2M 重启php-cgi killall php_cgi php_cgi start Nginx 的编译安装# tar zxvf nginx-0.6.29-tar.gz# cd nginx-0.6.29 ./configure \ "--prefix=/usr/local/nginx" \ "--sbin-path=/usr/local/nginx/sbin/nginx" \ "--conf-path=/usr/local/nginx/conf/nginx.conf" \ "--error-log-path=/usr/local/nginx/logs/error.log" \ "--http-log-path=/usr/local/nginx/logs/access.log" \ "--pid-path=/usr/local/nginx/var/nginx.pid" \ "--lock-path=/usr/local/nginx/var/nginx.lock" \ "--http-client-body-temp-path=/dev/shm//nginx_temp/client_body" \ "--http-proxy-temp-path=/dev/shm/nginx_temp/proxy" \ "--http-fastcgi-temp-path=/dev/shm/nginx_temp/fastcgi" \ "--user=www" \ "--group=www" \ "--with-cpu-opt=pentium4F" \ "--without-select_module" \ "--without-poll_module" \ "--with-http_realip_module" \ "--with-http_sub_module" \ "--with-http_gzip_static_module" \ "--with-http_stub_status_module" \ "--without-http_ssi_module" \ "--without-http_userid_module" \ "--without-http_geo_module" \ "--without-http_memcached_module" \ "--without-http_map_module" \ "--without-mail_pop3_module" \ "--without-mail_imap_module" \ "--without-mail_smtp_module" \ "--with-pcre" # make # make install # mkdir /dev/shm/nginx_temp 注:有时会因为pcre编译不过去,需要修改一下 --with-pcre=/usr/local/src/pcre-7.8,前提是已经下载了pcre源码包,并解压,不需要编译pcre。 nginx打开目录浏览功能nginx默认是不允许列出整个目录的。如需此功能,打开nginx.conf文件,在location server 或 http段中加入 autoindex on; 另外两个参数最好也加上去: autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes。 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtime on; 默认为off,显示的文件时间为GMT时间。 改为on后,显示的文件时间为文件的服务器时间 详细参照:http://wiki.nginx.org/NginxChsHttpAutoindexModule 关于Nginx遇到*.php的错误页面不能跳转问题1、最简单的重定向404页面(404.html为自定义的页面) error_page 404 /404.html; 2、需要重定向4** 5** 的所有的页面(error.html为自定义页面) error_page 402 403 404 500 502 503 504 /error.html; 3、需要重定向请求错误的php页面 如果是一般的文件上面的都可以解决,但是如果是PHP的,就会出no input file specified.或者是直接在浏览器输出404 需要在主配置文件nginx.conf 中 fastcgi 位置加上 fastcgi_intercept_errors on; 默认是关闭的 PS:特别注意的是404.html(自定义的文件)文件页面大小要超过512k,不然会被ie浏览器替换为ie默认的错误页面。 总结:需要将*.php的错误页面跳转的三步骤: 1,自定义404.html或404.php的跳转页面,文件大小超过512k 2,主配置文件nginx.conf加入fastcgi_intercept_errors on参数 3,error_page设置,需要将哪些系统返回状态做跳转 |