NGINX 配置通配符



我正在为我的项目使用Symfony2(PHP)框架,并且在配置我的NGINX以捕获我放置在"web"目录下的第三方库的请求方面遇到了一个小问题。

这是我的配置

server {
    listen 80;
    server_name test.com;
    root /var/www/my-symfony-project/web;
    rewrite ^/app.php/?(.*)$ /$1 permanent;
    location / {
        index app.php;
        try_files $uri @rewriteapp;
    }
    location @rewriteapp {
        rewrite ^(.*)$ /app.php/$1 last;
    }
    location ~ ^/(app|app_dev|config).php(/|$) {
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_split_path_info ^(.+.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

您可能已经注意到,根目录指向"/var/www/my-symfony-project/web"目录。

现在,问题是我在"web"目录中有这个"some-plugin"文件夹,并且那里有一些PHP文件不是由Symfony2路由处理的。

当我在上面说明的"服务器"块内有以下"位置"块时,我实际上让它工作了。

location ~ .php$ {
    fastcgi_pass   unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+.php)(/.*)$;
    include fastcgi_params;
}

起初使用这种类型的配置似乎还可以,但我们意识到它接受对我们评估为安全漏洞的任何"*.php"文件的请求。

有什么建议吗?

允许访问.php文件通常不被认为是危险的或安全漏洞,只要 PHP 文件被执行并且不以其源形式提供,当然,不要打印任何敏感信息。
如果前者不是这种情况,您可能应该更改设置或代码。

无论如何,您应该能够使用以下方法将.php文件处理限制为/var/www/my-symfony-project/web/some-plugin location

location ~ ^/var/www/my-symfony-project/web/some-plugin/.*.php$ {
    # your rules here
}

这应该匹配路径以 /var/www/my-symfony-project/web/some-plugin/ 开头并以大写或小写.php结尾的所有文件。

最新更新