Nginx:拒绝脚本运行在目录及其所有子目录中

说我的网站允许用户创build目录以及上传到一个名为“/ uploads”的目录,如下所示:

/上传/ user_created_folder_1

/上传/ user_created_folder_2

/上传/ user_created_folder_3

… 等等等等

如何防止在“/ uploads” 及其所有子目录中执行任何潜在的恶意脚本?

服务器块中的以下代码是否正确?

location /uploads/.*.(php|pl|py|jsp|asp|sh|cgi)$ { return 403; error_page 403 403.html; } 

非常感谢!

首先,nginx不执行脚本。 在某些情况下,它可以将请求委托给执行脚本的其他服务器。 最常见的情况是在请求中扩展文件,典型的nginxconfiguration块如下所示:

 location ~* \.php$ { fastcgi_pass backend; ... } 

所以你的问题应该是:如何防止代理请求到文件夹/uploads/ ? 与这个典型的configuration答案是一样简单的:

 location ^~ /uploads/ { } 

这意味着:如果请求文件夹上传,只是将它们作为静态文件,不要试图为他们寻找正则expression式位置(这需要你了解不同types的nginx location )。

如果你的configuration与典型configuration有很大的不同,我们需要看到它给你正确的答案。