海运的博客

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

发布时间:March 6, 2013 // 分类:Nginx,PHP,网络安全 // No Comments

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

先了解一下网站正常运行所用到的用户、目录权限:
Nginx进程运行用户:接收用户请求,处理静态文件,如果是PHP则转给PHP-CGI处理,网站目录拥有读权限。
PHP-cgi进程用户:处理PHP文件,网站目录拥有读权限,个别目录需要写入权限。

让每个网站使用单独的PHP-CGI进程,创建PHP-FPM配置文件,修改以下:

<value name="pid_file">/usr/local/php/logs/php-fpm.pid</value>
<value name="error_log">/usr/local/php/logs/php-fpm.log</value>
<value name="listen_address">/tmp/www.haiyun.me.sock</value>
<value name="user">www.onovp.com</value>  #PHP-CGI运行用户组
<value name="group">www.haiyun.me</value>

启动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

Nginx与PHP变量传递fastcgi_params

发布时间:July 1, 2012 // 分类:Nginx,PHP // No Comments

Nginx配置Fastcgi解析PHP时会调用fastcgi_params配置文件来传递服务器变量,默认内容如下:

#参数设定       #传递为PHP变量名    #Nginx自有变量,可自定义
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

可以修改配置文件设定自定义变量传递到php-cgi端:

fastcgi_param  haiyun      "Hello haiun";

新建php文件通过$_SERVER[""]变量测试:

<?
echo $_SERVER["haiyun"];
?>
curl www.haiyun.me/test.php
Hello haiyun

13-12-25更新,不推荐使用这种方式传递变量,会增加连接开销,可修改PHP-FPM配置文件传递变量:

env[haiyun] = test

监控Nginx遇到502 Bad Gateway自动重启lnmp

发布时间:April 15, 2012 // 分类:Nginx,Shell // 1 Comment

此脚本用Curl监控Nginx网站状态,如回应502信息即重启LNMP

#!/bin/bash
#Created by https://www.haiyun.me
website=https://www.haiyun.me #修改为您的网址
if
curl  -I $website|grep "HTTP/1.1 502"
then
/root/lnmp restart
fi

添加到crontab计划任务:

crontab -e
*/5 * * * * sh /path/lnmp-502.sh #5分钟执行一次

Nginx/Lnmp错误502 Bad Gateway解决方法

发布时间:April 15, 2012 // 分类:Nginx // No Comments

由于Nginx处理php反代到后端php-cgi处理,如未收到回应会输出502 Bad Gateway,可优化配置防止出现此类情况。
也可以新建脚本监控lnmp出现502 Bad Gateway自动重启lnmp
1.调整nginx与php-cgi通信方式,默认为unix-sock,更改为较稳定的TCP方式。

#https://www.haiyun.me
sed -i 's/\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/php/etc/php-fpm.conf 
#设置TCP监听127.0.0.1:9000
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/nginx.conf
sed -i 's/unix:\/tmp\/php-cgi.sock/127.0.0.1:9000/' /usr/local/nginx/conf/vhost/*
#设置nginx反代

2.修改php-cgi进程数量,每个php-cgi进程占用15M左右内存,由于lnmp为小内存优化,默认开启5个php-cgi进程,可根据自己情况适量增加,不要让系统因为内存不足而当掉。

sed -i 's/max_children">.</max_children">8</'  /usr/local/php/etc/php-fpm.conf
#调整为8个
/root/lnmp restart #t重启lnmp

3.修改超时时间,lnmp已优化设置。

分类
最新文章
最近回复
  • koldjf: 不能过滤
  • 杰迪武士: 此文甚好甚强巨,依照此文在树莓派2 + Rasbian上部署成功 感谢博主美文共赏
  • 海运: ups不知有没选项可设置此参数,不过你可以在另外一台电脑上安装nut客户端自动关机。
  • kgami: 想请教一下,设置了的电脑自动关机之后,几秒后UPS怎么也跟着关机了,导致另外一台电脑没关机就断...
  • 海运: 写的很详细了啊,/etc/nut/hosts.conf用以nut-cgi连接nut服务器参数,...
  • ryan: 请问下nginx配置好了,怎么和这个nut链接呢?最后可视化管理这块能给个详细一点的教程么?谢谢。
  • 1: /etc/config/fstab配置文件 https://openwrt.org/zh/do...
  • 听雨看雪: 找了好久,终于找到UP主,给出的正确解决方案,太感谢了,困扰大半年的问题,重装了N道PVE系统...
  • zr: 大佬,这个bash-completion是从哪个源搞到的
  • 姚生: 要要下载