标题:【转载】使用PHP-FPM避免Nginx下的spawn-fcgi漏洞 出处:刘新修 时间:Tue, 28 Sep 2010 13:20:09 +0000 作者:刘新修 地址:http://liuxinxiu.com:80/php_fpm_spawn_fcgi/ 内容: 之前传出的nginx漏洞其实不算是nginx的问题,而是spawn-fcgi的漏洞。张宴的博客总结了一份比较简单的方法(再提供一种解决Nginx文件类型错误解析漏洞的方法),利用正则规避了这个问题。不过这些解决方法都是治标不治本,我个人建议使用php-fpm代替spawn-fcgi。 php-fpm曾经是PHP项目的一个补丁,旨在将FastCGI进程管理整合进PHP包中。现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了php-fpm的分支,据说下个版本会融合进PHP的主分支去。 相对spawn-fcgi,php-fpm在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而php-fpm则没有这种烦恼。 如果你使用Ubuntu/Debian而且不想编译,可以尝试这个方法,安装最新的PHP 5.3.2及php-fpm 0.6包。但我个人使用的过程中发现这种方式可能导致一些像mcrypt等扩展无法使用,所以还是采用了源码安装的方式。 先确定安装了subversion等一些包 $ sudo apt-get install bison libxml2-dev libbz2-dev libpcre3-dev libssl-dev zlib1g-dev libmcrypt-dev libmhash-dev libmhash2 libcurl4-openssl-dev libpq-dev libpq5 libsyck0-dev$ svn co http://svn.php.net/repository/php/php-src/branches/PHP_5_3_FPM php_5_3_fpm$ cd php_5_3_fpm请先确定已经安装了autoconf2.13这个包,注意版本号。新版本的autoconf可能会导致无法生成配置文件 $ ./buildconf --force配置你的php,一定要有--enable-fpm $ ./configure --enable-fpm --with-foo --enable-bar...我使用的配置方式,ubuntu的很多开发包没有安装,所以这个步要安装各种开发包,挺花时间的。 $ ./configure --enable-fastcgi --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-pdo --with-pgsql --with-curl --disable-debug --enable-pic --enable-inline-optimization --with-xml --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-xslt --enable-memcache --enable-zip --with-pcre-regex --with-gd --with-sqlite --enable-exif --enable-zip --enable-ftp --with-pear --with-libxml-dir --with-mysql --with-openssl编译和安装 $ sudo make && make install安装后修改/usr/local/etc/php-fpm.conf,把所有的nobody改成你运行php-fpm的用户组和用户名,一般是www-data。修改一下,如果你的服务器内存比较小,建议从5开始递增修改,子进程会占用比较多的内存。 5完成后,运行 php-fpm -c /path/to/your/php.ini这个操作没有回显,默认在127.0.0.1:9000打开一个PHP的fastcgi服务,用类似spawn-fcgi的方法把php文件的处理pass给php-fpm即可。记得加入下面的参数,以避免一些古怪的问题引起502 Gateway错误。 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /path/to/your/root$fastcgi_script_name; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; include fastcgi_params; } Generated by Bo-blog 2.1.1 Release