要确保Nginx上传目录没有执行权限,可以通过以下几种方式进行配置:
chmod -R 755 /path/to/upload/directory
# 或者更严格的权限
chmod -R 644 /path/to/upload/directory
在Nginx的server或location配置块中添加以下内容:
location ^~ /uploads/ {
# 禁止执行PHP等脚本文件
location ~ \.php$ {
deny all;
return 403;
}
# 或者更通用的禁止所有执行
if ($request_filename ~* ".*\.(php|pl|py|jsp|asp|sh|cgi)") {
return 403;
}
}
如果上传目录需要PHP访问但不执行,可以在php.ini中设置:
open_basedir = /var/www/html:/tmp
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
<Directory "/path/to/upload/directory">
Options -ExecCGI -Indexes
RemoveHandler .php .php3 .php4 .php5 .phtml .pl .py .jsp .asp .htm .html .shtml .sh .cgi
php_flag engine off
SetHandler None
</Directory>
# 示例完整配置
location /uploads/ {
root /var/www/outside-webroot;
try_files $uri =404;
location ~ \.(php|pl|py|jsp|asp)$ {
deny all;
return 403;
}
}
通过以上方法,可以有效防止上传目录中的文件被当作脚本执行,提高网站安全性。