Назад | Перейти на главную страницу

Запретить запуск скриптов в 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-адресе мультимедиа, по которому пользователи могут загружать свои файлы на сервер. Как я могу это сделать? Например, когда пользователь переходит к example.com/media/bomb.py nginx возвращает страницу с ошибкой 404. Я также изменил разрешения на выполнение папки мультимедиа, но мне нужно сделать это для nginx, чтобы перестать просматривать файлы сценариев.

Прежде всего, когда в nginx нет другой конфигурации, он просто считывает файл из файловой системы, а затем отправляет его клиенту через TCP-соединение.

Итак, в вашем случае, если у вас был bomb.py в вашем каталоге мультимедиа ваши пользователи просто получат файл, он не будет выполнен.

Во-вторых, ваш сценарий загрузки должен проверять допустимые типы файлов для загрузки, чтобы такие файлы нельзя было даже загрузить.

Наконец, один ответ на ваш актуальный вопрос. Вы можете предоставить более конкретный location директива для каталога мультимедиа, которая позволяет обрабатывать с ним только определенные расширения. Остальные запросы проходят через location / директива.

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

Эта директива местоположения будет обслуживать файлы через блок, только если имя файла находится в /media/ каталог, имеет хотя бы один символ, который не . и имеет расширение gif / jpg / png.