拒绝在 Nginx 中运行特定 URL 的脚本

拒绝在 Nginx 中运行特定 URL 的脚本

我在 URL 上有一个媒体文件夹example.com/media/,我想拒绝用户在我的服务器中运行脚本。我的服务器应用程序是 nginx,在如何拒绝可写目录内的脚本执行我找不到特定 URL 的任何特殊之处。这是我的 nginx 服务器配置:

# sites-avalaible/default
server {
        listen  80;
        listen  443 ssl;
        server_name     www.example.com example.com;
        ssl_certificate /var/www/example/ssl/ssl.crt;
        ssl_certificate_key     /var/www/example/ssl/ssl.key;
        location /static  {
                alias   /var/www/example/static;
                expires 7d;
                add_header Pragma public;
                add_header Cache-Control "public, must-revalidate, proxy-revalidate";

        }
        location /media  {
                alias  /var/www/example/media;
                # limit download speed after 5mb download
                limit_rate_after 5m;
                limit_rate 120k;
                limit_req zone=lh burst=5 nodelay;
        }
        location / {
                proxy_pass      http://127.0.0.1:8000;
        }
}

我想拒绝运行媒体 URL 中的任何可执行文件,用户可以通过该 URL 将文件上传到服务器。我该怎么做?例如,当用户导航到example.com/media/bomb.pynginx 时,返回 404 错误页面。我还更改了媒体文件夹的执行权限,但我需要对 nginx 执行此操作,以便停止查看脚本文件。

答案1

首先,当 nginx 中没有其他配置时,它只是从文件系统读取文件,然后通过 TCP 连接将其发送到客户端。

因此,就您而言,如果bomb.py您的媒体目录中有一个,您的用户只会收到该文件,而不会执行该文件。

其次,您的上传脚本应该检查允许上传的文件类型,以确保没有这样的文件可以上传。

最后,回答一下您的实际问题。您可以location为媒体目​​录提供更具体的指令,这样只允许处理某些扩展。其他请求则通过location /指令进行。

location ~* /media/[^\.]+\.(gif|jpg|png)$ {
    ....
}

/media/仅当文件名在目录中、至少有一个不在目录中的字符.并且扩展名为 gif / jpg / png 时,此位置指令才会通过块提供文件。

相关内容