php-fpm多用户运行的两种方式

By | 2015年10月19日

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目录


mkdir fpm.d

2、复制php-fpm.conf 到fpm.d目录下并重命名,比如 blog.conf


cp php-fpm.conf ./fpm.d/blog.conf

3、进入fpm.d目录,修改blog.conf


cd fpm.d
vim blog.conf

4、删除前面的global块,或者注释掉

5、修改[www]为其他,比如你[blog]

6、配置[blog]池,主要修改两个地方:

6.1:第一处为运行的用户和用户组

即将


user = www
group = www

修改为


user=nobody #具体用哪个用户视自己情况而定,我只做个示例
group=nobody

6.2:修改监听的端口或者socket:

即将:


listen = 127.0.0.1:9000

修改为:


listen = /var/socket/php-fpm/blog.socket #php-fpm需要自己创建,当然也可以直接放在php-fpm目录下

修改成其他端口也是可以的,比如:listen = 127.0.0.1:9001

7、到主配置文件 php-fpm.conf将“include=…”前面的注释去掉,让它去读取fpm.d目录下的配置文件;

8、到此第一种方案就修改完毕了,重新启动测试一下:


service php-fpm reload

第二种:两个php-fpm主进程

这种方法需要独立的配置文件和独立的自启动文件:

1、复制一份php-fpm.conf主配置文件


cp php-fpm.conf php-fpm-blog.conf

2、修改主配置文件


vim php-fpm-blog.conf

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目录,复制一份自启动文件


cp php-fpm php-fpm2

4、修改自启动文件php-fpm2:

4.1:修改配置文件路径


php_fpm-CONF=${prefix}/etc/php-fpm.conf


php_fpm-CONF=${prefix}/etc/php-fpm-blog.conf

这个路径就是刚才的主配置文件

4.2:修改PID文件路径:


php_fpm_PID=${prefix}/var/run/php-fpm.pid

为:


php_fpm_PID=${prefix}/var/run/php-fpm-blog.pid

这个路径要和主配置文件中的pid路径一致

5、修改完毕后添加自动启动


chkconfig --add php-fpm2
chkconfig --level 2345 php-fpm2 on

6、启动服务


service php-fpm2 start