【转载】使用PHP-FPM避免Nginx下的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开始递增修改,子进程会占用比较多的内存。
<value name="max_children">5</value>
完成后,运行
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; }
【原创】关于wget、get、 put 及其网络管理优先采用的数据传输方式。
本人局域网内构建2台机器A+B , A 为LINUX操作系统,B为WIN-XP 。
作为局域网可以不考虑外网带宽问题,测试项目如下:
假设以LINUX为服务器环境,测试一:快速备份LINUX上的压缩文件最佳方式使用多线程下载工作【迅雷等】下载已经在LINUX端压缩好的备份文件速度局域网内可达10MB/S :
测试二:快速传送XP机上的文件至LINUX 【采用了put 、get 、wget】三种方式做对比@如下:
由以上可以看出,以SSH自带SFTP 的PUT 上传命令上传XP---至-----LINUX 传输文件,速度并不是很理想。仅均5000KB/秒
以下看下使用SSH 中SFTP的下行命令get 【备份LINUX文件至XP本地】如图:
速度仅为6000KB/秒 相对 迅雷的10MB 还是不及。
然后再看下使用SSH下Wget 下载命令,提前开开XP的WEB服务器,设置APACHE无下载限制。
速度为9MB/秒,和使用迅雷相当!!
如此得出结论:我们平时传输数据时,无论相对本地的上传和下载。尽可能地使用下载命令。
本地WIN 备份远程 LINUX 数据可以 迅雷 多线程下载工具!@
本地LINUX备份远程LINUX或者WIN主机可以使用SSH中下载命令 WGET
上传本地XP数据至远程LINUX可以SSH从远程使用WGET 下载“本地”数据【前提开WEB服务,配置无下载限制,ADSL临时获取IP用户方便使用】
上传本地XP或者LINUX 上传数据至远程LINUX 还可以使用SSH连接远程使用自带的SFTP用 PUT 下载 【速度无一般无优势】
=======================================================================
转载请注明 文章来源:http://liuxinxiu.com/wget_get_put/
【原创】WINDOWS下压缩tar.gz 的方法。(使用7z软件)
本人网站最起初有运作在WIN上,由于更换LINUX操作系统,数据迁移必不可少,ZIP RAR 等文件在LINUX 下支持都不是很理想,索性直接在WIN 下压缩成tar.gz 文件!
tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR、WinZip等主流压缩工具可以释放解开,却不能打包生成。但是tar.gz在服务器端却很常用,因为服务器系统linux占了相当的一部分。于是许多习惯用Windows的Web开发人员,在上传网站到空间时可能会遇到这个压缩格式的麻烦。如何生成得到tar.gz压缩包,在网上搜了一下除了复杂的命令行和开源软件之外,似乎没有其他的。偶然发现“7-ZIP”这个软件可以很方便地解决这个问题。
压缩前文件夹属性
压缩成.TAR 后文件属性
压缩成:WebRoot.tar 大小没有缩小,反而增大了些!
在:WebRoot.tar 基础上再次压缩成:WebRoot.tar.gz 最后大小:2.71GB
具体步骤如下:
一、安装7-ZIP以后,直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏,类似WinRAR和WinZIP的那种右键菜单。然后选“7-ZIP”->“添加到压缩档案”,在弹出来的窗口里有个“压缩格式”的选项,里面并没有tar.gz格式,没关系,里面有一个Tar格式,第一步就是要先压成tar格式。
二、成功打包为Tar文件后,你可能会发现这个tar文件包和原来的文件大小一样,也就是说tar本身并没有压缩,而是仅仅把它们打包成一个单独的Tar文件。所以需要做第二步,再在这个tar文件上面点右键,选“7-ZIP”->“添加到压缩档案”,这时候弹出的窗口里再看“压缩格式选项”,发现多了两个刚才没有的,其中就包括“GZip”,是的,这一步就是把tar文件继续压缩成GZip。选择“GZip”格式后确定,最后结果就是一个新的tar.gz格式的文件。
经本人测试,兼容各种软件,上传到服务器上也没有问题。整个过程鼠标流,完全不用敲什么命令行。至此,在windows下面得到tar.gz完成。
另外再记下一件事,在Cpanel 11 控制面板下面的File Manager 文件管理器中,有在线打包(Compress)和解压(Extract)功能,支持ZIP和Tar.gz等格式,RAR好像不行。关于这个解压功能的“是否覆盖存在文件”,如果压缩包是ZIP格式会有几行提示说是否要覆盖,不用费力去想怎样才能完成这个选择,实际上这几行字是不能点击的,它会默认选否,不覆盖。那么问题就来了,如果要想覆盖原有的文件怎么办?Cpanel的官方网站什么不说,倒是在某个英文论坛角落找到了答案,就是使用tar.gz格式。tar.gz压缩包释放的时候会默认选覆盖,我试过了确实如此,够晕吧。
========================================================================
转载请标明出处:http://liuxinxiu.com/win_tar_gz/
mysql 赋给用户权限 grant all privileges on
遇到了 SQLException: access denied for @'localhost' (using password: no)
解决办法 grant all privileges on *.* to joe@localhost identified by '1';
flush privileges;
拿 joe 1 登陆
附:
mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。
mysql>grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。
mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。
mysql>grant all privileges on *.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
Linux各个挂载点及其分区介绍
本文介绍Linux常用分区挂载点常识以及桌面、服务器分区挂载点的推荐配置,当然这个配置是天缘自己写的,分区大小这个话题是仁者见仁智者见智,欢迎大家一起交流这个话题,比如WEB服务、邮件服务、下载服务等,我们一起交流哪种类型服务下某挂载点应该加大就可以了,至于是否独立就看个人的了。
一、Linux分区挂载点介绍
Linux分区挂载点介绍,推荐容量仅供参考不是绝对,跟各系统用途以及硬盘空间配额等因素实际调整:
当然上面这么多挂载点,实际上是没有比较每个目录都单独进行挂载,我们只需要根据自己的实际使用需要对个别目录进行挂载,这样系统结构看起来也会精简很多。
一般来讲Linux系统最少的挂载点有两个一个是根挂载点/,另一个是swap,虽然swap也可以采用其他方式类似方式替代,但从使用角度,天缘认为没这个必要,把swap单独设置一个挂载点似乎对Linux系统的标准性更好支持。
二、Linux系统桌面、服务器分区推荐方案
下面以80G独立硬盘安装Ubuntu为例,列一下简单的分区方案。
1、普通桌面用户推荐分区方案(示例:80G桌面用户):
2、服务器用户推荐分区方案一(示例:80GWEB服务器用户,用户程序与系统程序合用usr):
2、服务器用户推荐分区方案二(示例:80GWEB服务器用户,用户程序与系统程序分用opt和usr):
分区方案关键点:
——大数据库一般要加大/usr挂载点
——多用户、下载类、多存储文件等要加大/home挂载点
——文件小,用户多要注意/tmp和/var挂载点大小
linux中,磁盘分区是一个物理概念,挂载点及其文件系统是一个逻辑概念,挂载是针对物理上的硬盘或其他存储空间。将某一存储介质挂载到文件系统,实际上就是相当于给许多门,分配门牌号码。
sda3挂载在/home上面,现在需要将sda9挂载在/home/pt/Videos上面
sudo mount /dev/sda9 /home/pt/Videos
sudo chmod 777 /home/pt/Videos 也可以sudo chmod 777 /dev/sda9
如果不设置这个文件夹或者磁盘的权限为777(任何人都有读写执行权),会出现各种问题
1、进入 /home/pt/Videos鼠标邮件的粘帖及其许多功能键无法使用,只能sudo cp,sudo mv方式操作文件
2、无法使用gedit等软件保存文件到/home/pt/Videos ,等各种问题
sudo mount /dev/sda9 /home/pt/Videos后,会出现以前/home/pt/Videos上有的文件,现在无法看见的情况,这是符合逻辑的,/home/pt/Videos以前同/home一起挂载在sda3上,现在将sda3挂载到另外一个地方,打开sda3就可以看见一个名为的/home/pt/Videos文件夹,上面有以前的文件。
linux可以做到:
一个分区设置多个挂载点
多个分区设置一个挂载点。
1.一个分区设置多个挂载点
pt@pt-laptop:~$ sudo mount /dev/sda8 /mnt
pt@pt-laptop:~$ sudo mount /dev/sda8 /home/pt/Videos
pt@pt-laptop:~$ sudo chmod 777 /mnt
pt@pt-laptop:~$ sudo chmod 777 /home/pt/Videos
此时,如果复制一个文件test到 /home/pt/Videos ,打开/mnt 也可以看见,此时test在两个逻辑分区上,只在一个物理分区上,如果在/mnt 删除test文件,打开/home/pt/Videos 也看不见了,如果在/home/pt/Videos复制一个test1,在/mnt中也可以看见,在/home/pt/Videos删除test1,在/mnt中也消失。
道理显而易见,/home/pt/Videos ,/mnt对应同一个物理区域,针对此物理区域的操作,两个逻辑区域由于对应同一物理区域的缘故,一个逻辑区域变动导致另一个逻辑区域也反应出同样的变动。
参见附件。
2.多个分区同一个挂载点
pt@pt-laptop:~$ sudo mount /dev/sda9 /mnt/sda9
pt@pt-laptop:~$ sudo mount /dev/sda10 /mnt/sda10
pt@pt-laptop:~$sudo cp /home/pt/test /mnt
此时的test文件在哪个物理分区上呢,此时test只在一个逻辑分区上,/home/pt/test。
通过下面的命令,依次打开sda8,sda9,sda10,可以发现,它在最后一个挂载的分区sda10上面。
pt@pt-laptop:~$ sudo mkdir /mnt/sda8 /mnt/sda9 /mnt/sda10
pt@pt-laptop:~$ sudo mount /dev/sda8 /mnt/sda8
pt@pt-laptop:~$ sudo mount /dev/sda9 /mnt/sda9
pt@pt-laptop:~$ sudo mount /dev/sda10 /mnt/sda10
Linux 开机启动[root@localhost]变成bash-3.2#解决方法
我只是记录一下命令,这个就可以搞定。
source .bashrc
login as: root
root@*****218’s password:
Last login: Thu Jul 1 22:06:47 2010 from 110.203.60.70
-bash-3.2# copy /etc/skel/.bashrc ~
-bash: copy: command not found
-bash-3.2# cp /etc/skel/.bashrc ~
-bash-3.2# source ~/.bashrc
[root@**** ~]#
不同的shell可以去切换:例:
[root@localhost ~]# bash
bash-3.2# sh
sh-3.2# tcsh
[root@localhost ~]# bash
bash-3.2# csh
[root@localhost ~]#
ERROR 2002 (HY000): Can't connect to local MySQL server through socket
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/usr/local/mysql/tmp/mysql.sock' (2)
--------------------------------------------------------------------------------
此类问题如,mysql.sock' 确实存在,请给mysql用户在tmp文件夹的足够权限!
用yum下载rpm包
Linux压力测试工具webbench的安装使用介绍
webbench文件下载:
http://at.liuxinxiu.com/2010/09/file/webbench-1_5_tar.gz
1、适用系统:Linux
2、编译安装:
- # wget ←下载源程序
- # tar zxvf webbench-1.5.tar.gz ←解压源文件
- # make ←编译程序
- # mkdir /usr/local/man ←建立相应目录(否则导致无法正常安装)
- # make install ←安装程序
使用方法/
webbench -c 500 -t 30 http://127.0.0.1/test.jpg
测试结果:
- # Webbench - Simple Web Benchmark 1.5
- # Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.
- # Benchmarking: GET http://127.0.0.1/test.jpg
- # 500 clients, running 30 sec.
- # Speed=3230 pages/min, 11614212 bytes/sec.
- # Requests: 1615 susceed, 0 failed.
webbench最多可以模拟3万个并发连接去测试网站的负载能力
yum -y remove httpd 如何默认有APACHE先卸载APACHE
spawn-fcgi是一个小程序,这个程序的作用是管理fast-cgi进程,功能和php-fpm类似
先YUM查找需要的库:
- yum -y install gcc gcc-c++ make imake autoconf automake
-
- yum -y install gcc gcc-c++ openssl openssl-devel pcre pcre-devel gdbm gdbm-devel libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel libtool-ltdl libtool-ltdl-devel curl-devel
-
由于mysql编译比较慢我用yum安装了
yum -y install mysql-server mysql-devel
----------------------------------------------------------------------------------------------------
wget http://www.nginx.org/download/nginx-0.8.32.tar.gz
ls
tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32
- groupadd www
- useradd -g www -s /sbin/nologin -d /dev/null www
- ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
- make && make install
- cd /usr/local/nginx/conf
- mv nginx.conf nginx.conf.bak
vim nginx.conf
=====================================================
- user www www;
-
- worker_processes 8;
-
- error_log logs/error.log crit;
-
- pid logs/nginx.pid;
-
- #Specifies the value for maximum file descriptors that can be opened by this process.
- worker_rlimit_nofile 65535;
-
- events
- {
- use epoll;
- worker_connections 65535;
- }
-
- http
- {
- include mime.types;
- default_type application/octet-stream;
-
- #charset gb2312;
-
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffers 4 32k;
- client_max_body_size 8m;
-
- sendfile on;
- tcp_nopush on;
-
- keepalive_timeout 30;
-
- tcp_nodelay on;
-
- fastcgi_connect_timeout 300;
- fastcgi_send_timeout 300;
- fastcgi_read_timeout 300;
- fastcgi_buffer_size 64k;
- fastcgi_buffers 4 64k;
- fastcgi_busy_buffers_size 128k;
- fastcgi_temp_file_write_size 128k;
-
- gzip on;
- gzip_min_length 1k;
- gzip_buffers 4 16k;
- gzip_http_version 1.0;
- gzip_comp_level 2;
- gzip_types text/plain application/x-javascript text/css application/xml;
- gzip_vary on;
-
- include /usr/local/nginx/conf/vhosts/*.conf;
- }
-
========================================
mkdir vhosts
cd vhosts/
vim s157.com.conf
==============================
- server {
- listen 184.82.2.206:80;
- server_name s157.com www.s157.com;
-
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
- #access_log /usr/local/nginx/logs/www.access.log;
- access_log off;
-
- location / {
- root /ftp/s157;
- index index.html index.htm index.php;
-
- location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
- expires 30d;
- }
-
- location ~ .*.(htm|html|js|css)$ {
- expires 1h;
- }
-
- }
-
- #error_page 404 =200 http://$host;
- #error_page 404 /404.html;
-
- location ~ .php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /ftp/s157/$fastcgi_script_name;
- include fastcgi_params;
- }
-
-
- }
-
- =================================
- 其中 可有可无 功能是防盗链的
- location ~* .(gif|jpg|png|swf|flv)$ {
- valid_referers none blocked abc.com www.abc.com;
- if ($invalid_referer) {
- #rewrite ^/ http://www.abc.com/403.jpg;
- return 404;
- }
- }
- =============
然后 找了个针对 CentOS 的nginx重启控制脚本
chmod 755 nginx
cp nginx /etc/init.d/
/etc/init.d/nginx restart 测试能不能成功 启动 !!!!!!!!!!!!!