欢迎来到云服务器

网络技术

LNMP情况中如何正确的配置指定目次克制执行PHP措施

    文中提到,利用lnmp1.1搭建的nginx情况,正好我的vps也是lnmp搭建的情况,所以我可以在我的vps里做尝试。

    看到文中的办理方案

    LNMP情况中如何正确的配置指定目次克制执行PHP措施

    在location中,将匹配到/(avatar|uploads|ups)/.*.(php|php5)?$的请求全部禁用掉。

    好像是一个很好的要领,那我们怎么绕过?

    在web世界里,有一种请求方法叫pathinfo,我们在图中也可以看到,倒数第二行注释掉了一个include pathinfo.conf。前面的说明里也说到了,假如要开启pathinfo,只要注释掉try_files $uri =404即可。

    许多框架、CMS的默认请求方法就是pathinfo,如著名php框架codeigniter,所以可见pathinfo用的是较量广的,所以也会有大量vps在这里是答允pathinfo的。

    那么,当开启了pathinfo后,前面的deny all;就完全失效了,我们只需要在upload目次里上传xxx.php后,如下方法会见:

    http://xxx/upload/xxx.php/xxx

    即可让location /(avatar|uploads|ups)/.*.(php|php5)?$这条法则完全失效,因为上述请求并不以.php末了。

    那么,奈何才气有效克制某目次下理会php?

    那照旧应该回到nginx理会php的方法上。我们看到上图,我们可以发明,实际长进入这个location块:location ~ [^/].php(/|$),才真正将请求交给fastcgi去理会。

    所以,我们只需要阻止请求进入这个location块,那么这个请求岂论是奈何的后缀,奈何的方法,都不会被php-fpm理会的。

    所以,我的要领是:

location ^~ /upload/ {
    default_type text/plain;
    expires 30d;
}
location ~ [^/].php(/|$)
{
        # comment try_files $uri =404; to enable pathinfo
        #try_files $uri =404;
        fastcgi_pass  unix:/tmp/php-cgi-leavesongs.sock;
        fastcgi_index index.php;
        include fastcgi.conf;
        include pathinfo.conf;
}

    在php的理会块前,加上“location ^~ /upload/ ”块,,^~的意思是“一旦匹配上该块,则不再匹配其他块,一般匹配目次”。所以,这里正好满意我的要求,只要在/upload/目次下的文件,都将匹配到这个块中,并且不会再匹配此外块,所以也不会再进入下面的php理会块中。

腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号