nginx怎样禁止直接访问某个目录及里面的文件

nginx怎样禁止直接访问某个目录及里面的文件,第1张

禁止访问扩展名为bat的文件,配置如下:

location ~* /.bat {

deny all

}

禁止访问configs目录,以及其下所有子目录或文件,配置如下:

location ^~ /configs/ {

deny all

}

nginx.conf server { listen 80server_name www.sectop.comindex index.html index.htm index.phproot /data/htdocs/ www.sectop.com/#limit_conn crawler 20 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sockfastcgi_pass 127.0.0.1:9000fastcgi_index index.phpinclude fcgi.conf} } server { listen 80server_name www.sectop.cnindex index.html index.htm index.phproot /data/htdocs/ www.sectop.cn/#limit_conn crawler 20 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sockfastcgi_pass 127.0.0.1:9000fastcgi_index index.phpinclude fcgi.conf} } nginx在80端口接受到访问请求后,会把请求转发给9000端口的php-cgi进行处理 而如果修改php.ini中open_basedir= ../../../../../ ,针对两个不同的网站, www.sectop.com , www.sectop.cn 都会把请求发送给9000处理,而如果先访问 www.sectop.com 那么../../../../../就会变成sectop.com网站的根目录地址,然后这时候如果你访问 www.sectop.cn ,那么open_basedir仍然是sectop.com网站的根目录,但是对于sectop.cn来说,又是不允许访问的,所以就造成了,第二个站点打开以后会出现no input files,那么有什么解决办法呢? 我们可以把不同的虚拟主机发送到不同的php-cgi端口进行处理,当然响应的php-fpm配置文件中的open_basedir也不同。。我们来看看怎么配置。。 首先,nginx.conf配置如下 server { listen 80server_name www.sectop.comindex index.html index.htm index.phproot /data/htdocs/ www.sectop.com/#limit_conn crawler 20 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sockfastcgi_pass 127.0.0.1:9000fastcgi_index index.phpinclude fcgi.conf} } server { listen 80server_name www.sectop.cnindex index.html index.htm index.phproot /data/htdocs/ www.sectop.cn/#limit_conn crawler 20 location ~ .*\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sockfastcgi_pass 127.0.0.1:9001fastcgi_index index.phpinclude fcgi.conf} } 注意: www.sectop.com 的请求发送到9000端口 , www.sectop.cn 的请求发送到9001端口,依次类推 nginx配置修改了,相对的,php-fpm.conf也要修改 每个站点建一个conf sectop.com站点 #cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/ www.sectop.com.conf #vi /usr/local/webserver/php/etc/ www.sectop.com.conf 找到php_defines,添加 <value name="open_basedir">/data/htdocs/ www.sectop.com :/tmp:/var/tmp</value> sectop.cn站点 #cp /usr/local/webserver/php/etc/php-fpm.conf /usr/local/webserver/php/etc/ www.sectop.cn.conf #vi /usr/local/webserver/php/etc/ www.sectop.cn.conf 找到php_defines,添加 <value name="open_basedir">/data/htdocs/ www.sectop.cn :/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.sectop.com.conf $php_fpm_BIN --fpm --fpm-config /usr/local/webserver/php/etc/ www.sectop.cn.conf 启动服务 #/usr/local/webserver/php/sbin/php-fpm restart 查看端口 #netstat -tln 开了9000 9001分别处理两个站点请求 两个php-cgi主进程加载不同的conf文件,这样就完美解决了虚拟主机webshell能跨目录的问题 不要复制,明白原理就明白怎么弄了


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/62910.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-28
下一篇2023-02-28

发表评论

登录后才能评论

评论列表(0条)

    保存