nginx php 防止跨站 多网站单独php-fpm进程目录权限防跨站

关注安全
0 198

多个虚拟机网站防跨站是首要的任务,PHP5.3之前的版本不支持open_basedir,只能通过控制PHP-cgi进程及目录用户权限进行限制,防止跨站访问。

先了解一下网站正常运行所用到的用户、目录权限:

Nginx进程运行用户:接收用户请求,处理静态文件,如果是PHP则转给PHP-CGI处理,网站目录拥有读权限。

PHP-cgi进程用户:处理PHP文件,网站目录拥有读权限,个别目录需要写入权限。

让每个网站使用单独的PHP-CGI进程,创建PHP-FPM配置文件,修改以下:/usr/local/php/logs/php-fpm.pid

/usr/local/php/logs/php-fpm.log

/tmp/www.haiyun.me.sock

www.onovp.com #PHP-CGI运行用户组

www.haiyun.me

启动PHP-CGI进程:/usr/local/php/bin/php-cgi --fpm --fpm-config /usr/local/php/etc/www.haiyun.me.conf

设置网站目录权限,设Nginx运行用户为www:chown -R www.haiyun.me:www /home/wwwroot/www.haiyun.me

chmod -R 550 /home/wwwroot/www.haiyun.me

chmod 701 /home/wwwroot/

再修改Nginx网站配置文件,解析PHP所使用的PHP-CGI进程:location ~ .*\.(php|php5)?$

{

fastcgi_pass unix:/tmp/www.haiyun.me.sock;

fastcgi_index index.php;

include fcgi.conf;

}

php-cgi进程简单管理脚本:#! /bin/sh

# chkconfig: 2345 55 25

#https://www.haiyun.me

cgi=/usr/local/php/bin/php-cgi

case "$1" in

start)

for conf in `ls /usr/local/php/etc/*.conf`

do

$cgi --fpm --fpm-config $conf

done

;;

stop)

for pid in `ls /usr/local/php/logs/*.pid`

do

kill -TERM `cat $pid`

done

;;

restart)

$0 stop

$0 start

;;

*)

echo "Usage: $0 {start|stop|restart}"

exit 1

;;

esac