php-fpm各个站要是以同样的用户运行的话,一个网站要是被攻击了的话,可能会威胁到其他网站。当然解决方法不仅仅是以多用户的方式去运行php-fpm,还可以配置open_basedir,但是测试了一下,貌似只有在php5.3以上才有效。
下面以php5.3.28为例,配置多用户运行php-fpm:
第一种:一个php-fpm主进程
这种方式比较简单,也只需要一个php-fpm自启动文件
首先我们查看一下原php-fpm.conf的这个配置文件,分为两个部分,一个是global块,另外一个是自定义的块,配置文件里面称为pool池,默认叫“www”。在global池的上方,有一行注释了的“include=etc/fpm.d/*.conf”配置项,再通过www池的配置,我们可知可以通过不同的池来配置不同的用户,来达到多个用户运行php-fpm的目的,步骤如下:
1、在etc目录下创建fpm.d目录
1 2 mkdir fpm.d
3
2、复制php-fpm.conf 到fpm.d目录下并重命名,比如 blog.conf
1 2 cp php-fpm.conf ./fpm.d/blog.conf3
3、进入fpm.d目录,修改blog.conf
1 2 cd fpm.d
3 vim blog.conf
4
4、删除前面的global块,或者注释掉
5、修改[www]为其他,比如你[blog]
6、配置[blog]池,主要修改两个地方:
6.1:第一处为运行的用户和用户组
即将
1 2 user = www3 group = www4
修改为
1 2 user=nobody #具体用哪个用户视自己情况而定,我只做个示例3 group=nobody
4
6.2:修改监听的端口或者socket:
即将:
1 2 listen = 127.0.0.1:9000
3
修改为:
1 2 listen = /var/socket/php-fpm/blog.socket #php-fpm需要自己创建,当然也可以直接放在php-fpm目录下3
修改成其他端口也是可以的,比如:listen = 127.0.0.1:9001
7、到主配置文件 php-fpm.conf将“include=…”前面的注释去掉,让它去读取fpm.d目录下的配置文件;
8、到此第一种方案就修改完毕了,重新启动测试一下:
1 2 service php-fpm reload3
第二种:两个php-fpm主进程
这种方法需要独立的配置文件和独立的自启动文件:
1、复制一份php-fpm.conf主配置文件
1 2 cp php-fpm.conf php-fpm-blog.conf
3
2、修改主配置文件
1 2 vim php-fpm-blog.conf
3
2.1:修改[global]下pid和error_log文件的路径
修改 pid=run/php-fpm.pid 为 pid=run/php-fpm-blog.pid
修改 error_log = /log/php-fpm.log 为 error_log = /log/php-fpm-blog.log
2.2:修改池的名称[www]为[blog],不过这个可以不用修改了,因为这里和原来的进程是独立的
2.3:修改用户和用户组;
2.4:监听端口或socket文件;
以上两部可以按照第一种方案进行修改,这里就不再重复
3、进入/etc/init.d目录,复制一份自启动文件
1 2 cp php-fpm php-fpm2
3
4、修改自启动文件php-fpm2:
4.1:修改配置文件路径
1 2 php_fpm-CONF=${prefix}/etc/php-fpm.conf3
为
1 2 php_fpm-CONF=${prefix}/etc/php-fpm-blog.conf3
这个路径就是刚才的主配置文件
4.2:修改PID文件路径:
1 2 php_fpm_PID=${prefix}/var/run/php-fpm.pid3
为:
1 2 php_fpm_PID=${prefix}/var/run/php-fpm-blog.pid3
这个路径要和主配置文件中的pid路径一致
5、修改完毕后添加自动启动
1 2 chkconfig --add php-fpm2
3 chkconfig --level 2345 php-fpm2 on4
6、启动服务
1 2 service php-fpm2 start3