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

Nginx - разрешить доступ к каталогу папки только по URL-адресу

интерфейсный веб-разработчик здесь. Извините заранее.

Моя компания хочет хранить новые сборки нашего программного обеспечения на нашем веб-сервере под управлением Nginx, предоставляемого Двигатель WP.

Путь к файлу для этих сборок будет company.com/downloads/file.zip. Мы хотим ограничить доступ к файлам в этой папке, если они не поступают с определенного URL-адреса, который находится за воротами входа для наших клиентов.

Я нашел ресурс по предотвращению хотлинкинга изображений (мы будем иметь дело с файлами .zip), который может сработать для меня, но мне нужна помощь с синтаксисом этого языка. Вероятно, с этим все не так.

location ~ /downloads/$ {
valid_referers none blocked ~.allowed_domain.com;
if ($invalid_referer) {
return 404;
}
}

WP Engine не позволяет мне самому добавлять код Nginx, поэтому мне придется отправить им код, который я хочу, чтобы они реализовали. Если кто-нибудь знает, как это сделать, и может мне помочь, я буду очень признателен!

Другая возможность - использовать X-Accel заголовок. Я не знаю вашего варианта использования, поэтому он может не подойти.

X-Accel - это специфический заголовок nginx. Вы можете использовать этот заголовок в своем PHP-скрипте - например, header("X-Accel-Redirect: /private-downloads/magic.iso") Когда nginx распознает этот заголовок, он будет серверным содержимым файла magic.iso находится в /data/private-downloads.

Итак, ваша задача подготовить download.php которые проверяют авторизацию и отвечают либо X-Accel заголовок или перенаправление на экран входа в систему.

Значение /private-downloads/ в nginx.conf

location /private-downloads/ {
    internal;    # this
    alias /data/private-downloads;
    # this should be located outside of HTTP server root
}

Для получения дополнительной информации, пожалуйста, проверьте вопросы x-Accel на serverfault. 1

Ты можешь использовать valid_referers Директива nginx. ( документ nginx )

location /downloads/ {
    alias /var/www/downloads;
    valid_referers  www.example.me ;

if ($invalid_referer) {
        return 404;
    }
}

Я лично никогда не пробовал это в продакшене, потому что предпочитаю использовать Заголовок X-Accel . Вы можете подтвердить своего пользователя в сценарии PHP, а затем отправить заголовок nginx X-Accel. Заголовок попросит nginx передать статические файлы на сервер nginx.