nginx虚拟主机防webshell完美版,使用nginx的朋友可以参考下。
nginx虚拟主机防webshell完美版,使用nginx的朋友可以参考下。我们先来看下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>
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>
找到listen_address,修改为
<value name="listen_address">127.0.0.1:9001</value> 注意这里的端口号
最后要修改php-fpm启动脚本
#vi /usr/local/webserver/php/sbin/php-fpm
注释掉原来的 #$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
开了9000 9001分别处理两个站点请求
两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题
当然,启动之前记得conf里面的max_children,开启php-cgi子进程数,相应要减少一些,以免造成内存不足
企业网站建设解决方案 营销型网站建设解决方案 行业门户网站建设解决方案 外贸网站解建设决方案 品牌形象网站建设解决方案 购物商城网站建设解决方案 政府网站建设解决方案 手机网站建设解决方案 教育培训网站建设解决方案 珠宝高端奢饰品网站建设解决方案 房地产、地产项目网站建设解决方案 集团、上市企业网站建设解决方案 数码、电子产品网站建设解决方案 美容、化妆品行业网站建设解决方案
10年专业互联网服务经验 重庆最专业网站团队 资深行业分析策划 B2C营销型网站建设领先者 最前沿视觉设计、研发能力 时刻最新技术领先研发能力 具有完备的项目管理 完善的售后服务体系 深厚的网络运营经验
中技互联一直秉承专业、诚信、服务、进取的价值观,坚持优秀的商业道德,以用户最终价值为导向,向用户提供优质产品和优质服务,从而赢得了用户的信赖。始终以不懈的努力、更高的目标来要求自己。
主营业务:网站建设 | 重庆网站建设 | 重庆网站设计 | 重庆网站制作 | 重庆网页设计 | 重庆网站开发
CopyrightZJCOO technology Co., LTD. All Rights Reserved.
渝ICP 备11003429号