我正在为我的项目使用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
结尾的所有文件。