Nginx虚拟主机防Webshell安全检测程序完美版(图)
2010-05-25 20:58
555 查看
我们先来看下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也要修改每个站点建一个confA站点#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>
![](http://www.anqn.com/pic/5/a2009-8-14-734030.jpg)
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>
![](http://www.anqn.com/pic/5/a2009-8-14-580331.jpg)
找到listen_address,修改为<value name="listen_address">127.0.0.1:9001</value> 注意这里的端口号
![](http://www.anqn.com/pic/5/a2009-8-14-621178.jpg)
最后要修改php-fpm启动脚本#vi /usr/local/webserver/php/sbin/php-fpm
![](http://www.anqn.com/pic/5/a2009-8-14-360108.jpg)
注释掉原来的 #php_fpm_BIN --fpm php_opts,田间php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.a.com.confphp_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.b.com.conf启动服务#/usr/local/webserver/php/sbin/php-fpm restart查看端口#netstat -tln
![](http://www.anqn.com/pic/5/a2009-8-14-371038.jpg)
开了9000 9001分别处理两个站点请求两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题当然,启动之前记得conf里面的max_children,开启php-cgi子进程数,相应要减少一些,以免造成内存不足
{
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也要修改每个站点建一个confA站点#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>
![](http://www.anqn.com/pic/5/a2009-8-14-734030.jpg)
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>
![](http://www.anqn.com/pic/5/a2009-8-14-580331.jpg)
找到listen_address,修改为<value name="listen_address">127.0.0.1:9001</value> 注意这里的端口号
![](http://www.anqn.com/pic/5/a2009-8-14-621178.jpg)
最后要修改php-fpm启动脚本#vi /usr/local/webserver/php/sbin/php-fpm
![](http://www.anqn.com/pic/5/a2009-8-14-360108.jpg)
注释掉原来的 #php_fpm_BIN --fpm php_opts,田间php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.a.com.confphp_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/www.b.com.conf启动服务#/usr/local/webserver/php/sbin/php-fpm restart查看端口#netstat -tln
![](http://www.anqn.com/pic/5/a2009-8-14-371038.jpg)
开了9000 9001分别处理两个站点请求两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题当然,启动之前记得conf里面的max_children,开启php-cgi子进程数,相应要减少一些,以免造成内存不足
相关文章推荐
- nginx虚拟主机防webshell 完美版
- nginx做安全的虚拟主机
- nginx+fastcgi+php安全虚拟主机隔离配制方法
- nginx虚拟主机防webshell完美版
- nginx+fastcgi+php安全虚拟主机隔离配制方法
- 博客文章: Nginx虚拟主机防webshell
- cpanel+whcms +cloudlinux +r1soft完美虚拟主机方案
- nginx的虚拟主机配置
- ubuntu 12.04下面配置nginx虚拟主机
- windows2000做虚拟主机的安全设置
- linux学习第四十四篇:Nginx安装,Nginx默认虚拟主机,Nginx域名重定向
- nginx配置说明及虚拟主机站点的配置(基于域名)
- Centos中Nginx部署基于IP的虚拟主机
- 在Nginx中部署基于IP的虚拟主机
- 天下数据盘点香港虚拟主机适用的程序
- (转载)nginx的配置、虚拟主机、负债均衡和反向代理(3)
- LNMP架构(二)之nginx安装,虚拟主机,用户认证,域名重定向
- Nginx多虚拟主机下泛域名配置
- 创建安全的ASP.NET虚拟主机的设置步骤(转载)
- apache与nginx的默认虚拟主机的配置及作用