小知识:nginx虚拟主机防webshell完美版

我们先来看下nginx.conf

  server

  {

    listen       80;

    server_name  www.a.com;

    index index.html index.htm index.php;

    root  /data/htdocs/www.a.com/;

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

}

  server

  {

    listen       80;

    server_name  www.b.com;

    index index.html index.htm index.php;

    root  /data/htdocs/www.b.com/;

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

}

nginx在80端口接受到访问请求后,会把请求转发给9000端口的php-cgi进行处理

而如果修改php.ini中open_basedir= ../../../../../ ,针对两个不同的网站,www.a.com , www.b.com都会把请求发送给9000处理,而如果先访问www.a.com那么../../../../../就会变成A网站的根目录地址,然后这时候如果你访问www.b.com,那么open_basedir仍然是A网站的根目录,但是对于B来说,又是不允许访问的,所以就造成了,第二个站点打开以后会出现no input files,那么有什么解决办法呢?

我们可以把不同的虚拟主机发送到不同的php-cgi端口进行处理,当然响应的php-fpm配置文件中的open_basedir也不同。。我们来看看怎么配置。。

首先,nginx.conf配置如下

 server

  {

    listen       80;

    server_name  www.a.com;

    index index.html index.htm index.php;

    root  /data/htdocs/www.a.com/;

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

}

  server

  {

    listen       80;

    server_name  www.b.com;

    index index.html index.htm index.php;

    root  /data/htdocs/www.b.com/;

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9001;

      fastcgi_index index.php;

      include fcgi.conf;

    }

}

注意:www.a.com 的请求发送到9000端口 , www.b.com的请求发送到9001端口,依次类推

nginx配置修改了,相对的,php-fpm.conf也要修改

每个站点建一个conf

A站点

#cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.a.com.conf

#vi /usr/local/webserver/php/etc/www.a.com.conf

找到php_defines,添加

<value name=”open_basedir”>/data/htdocs/www.a.com:/tmp:/var/tmp</value>

 %小知识:nginx虚拟主机防webshell完美版-猿站网-插图

B站点

#cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/www.b.com.conf

#vi /usr/local/webserver/php/etc/www.b.com.conf

找到php_defines,添加

<value name=”open_basedir”>/data/htdocs/www.b.com:/tmp:/var/tmp</value>

%小知识:nginx虚拟主机防webshell完美版-1猿站网-插图

找到listen_address,修改为

<value name=”listen_address”>127.0.0.1:9001</value>   注意这里的端口号

%小知识:nginx虚拟主机防webshell完美版-2猿站网-插图

最后要修改php-fpm启动脚本

#vi /usr/local/webserver/php/sbin/php-fpm

%小知识:nginx虚拟主机防webshell完美版-3猿站网-插图

注释掉原来的 #$php_fpm_BIN –fpm $php_opts,添加

$php_fpm_BIN –fpm –fpm-config /usr/local/webserver/php/etc/www.a.com.conf

$php_fpm_BIN –fpm –fpm-config /usr/local/webserver/php/etc/www.b.com.conf

启动服务

#/usr/local/webserver/php/sbin/php-fpm restart

查看端口

#netstat -tln

 %小知识:nginx虚拟主机防webshell完美版-4猿站网-插图

开了9000 9001分别处理两个站点请求

两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题

当然,启动之前记得conf里面的max_children,开启php-cgi子进程数,相应要减少一些,以免造成内存不足

文章来源:DoDos Blog 

原文地址:http://www.sectop.com/post/35.html
声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Linux Mplayer播放各种格式的电影

2023-5-18 2:55:57

建站知识

小知识:一起回顾一下linux常用命令

2023-5-18 3:04:23

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索