Как я могу убедиться, что Nginx загружает незашифрованные текстовые файлы вместо встроенных?
У меня есть приложение Rails (Redmine), которое работает с Nginx. Если я нажимаю на какое-либо вложение, мой браузер (Firefox, т.е. Chrome) попросит меня загрузить файл. Но если я нажимаю на вложение типа txt, мой браузер открывает этот файл в браузере.
Как я понимаю, решить задачу Nginx - открыть файл в браузере или скачать его. Как я могу настроить это?
3 ответа
Тип по умолчанию для расширения txt- text / plain. Это поведение описано в файле mime.types. Используйте http://nginx.org/en/docs/http/ngx_http_core_module.html или http://nginx.org/en/docs/http/ngx_http_core_module.html чтобы переопределить его (возможно, для application / octet-поток).
Изменение Content-Type из .txt файлы могут работать, но это несколько рискованный способ решения этой проблемы, потому что вы не можете на 100% гарантировать, что браузер пользователя отреагирует так, как вы ожидаете. И, кроме того, вводить в заблуждение .txt файл в виде двоичного файла.
Вместо этого я предлагаю использовать стандартный способ заставить браузер загружать, а не отображать файл, который должен использовать Content-Disposition заголовок со значением attachment ( RFC 2183, см. Также RFC 2616).
Например, это nginx location блок отправит такой заголовок с .txt файлы под /downloads/ URI и, следовательно, они будут вынуждены скачать:
location ~ ^/downloads/.*\.txt$ {
add_header Content-Disposition "attachment";
}
Таким образом, вы можете добавить другие соответствующие соответствия и т. Д., Соответствующие вашей конфигурации.
Вам нужно извлечь местоположение для загружаемого файла и установить их тип контента как application/octet-stream,
В нашем сервисе есть следующий каталог для загрузки промоматериала (который включает в себя PDF-файлы, изображения и некоторые документы, но я уверен, что он будет работать и с TXT-файлами):
location /promomaterial/download/ {
add_header Content-Type application/octet-stream;
}
Каждый браузер, который мы пробовали, загружает все файлы из этого места, а не пытается их отобразить.