nginx 在线预览与强制下载

news/2024/11/9 2:53:48/

环境如下:

nginx version: nginx/1.14.1
nginx version: nginx/1.16.1
Chrome:102.0.5005.63(正式版本) (64 位)
CentOS Linux release 7.5.1804 (Core) 

将任意类型文件设置成 在线预览 或者 直接下载

.log.txt 文件为例,nginx 默认配置下 .txt是可以在线打开,而.log 会有弹窗,也就是下载。

使用是nginx,配置实现如下:

#################default_type 方式 ##################
# 配置在线预览
location ~ .*\.log$ {default_type text/plain; charset utf-8;
}
# 配置下载文件模式
location ~ .*\.txt$ {types        { }default_type application/octet-stream; 
}
#################add_header  方式 ##################
# 配置在线预览
location ~ .*\.log$ {add_header Content-Type "text/plain; charset=utf-8";
}
# 配置下载文件模式
location ~ .*\.txt$ {types        { }add_header Content-Type "application/octet-stream; charset=utf-8";
}
#################修改 mime.types方式##################
vi mime.types #新增如下
types {···# 配置全局txt文件下载application/octet-stream        txt;# 配置全局log文件在线预览text/plain                      log;
}
# 影响nginx 全局配置,个人不太推荐。##############Content-Disposition 方式###############
# 配置附件下载模式
location ~ .*\.txt$ {add_header Content-Disposition "attachment";
}

为什么浏览器访问不同的类型的文件会出现不同结果呢

简单的来说浏览器一般会根据nginx的Response Headers中返回的content-type 来识别处理渲染文件,例如常见的格式 有text/html HTML文档格式、text/plain 纯文本格式。打开浏览器开发工具可以看到:

Response Headers:content-encoding: gzipcontent-language: zh-CNcontent-type: text/html;charset=utf-8

或者用命令的方式,可以看到 Content-Type 字段:

[root@tserver121 conf]# curl http://localhost/packer.log -I
HTTP/1.1 200 OK
Server: nginx
Content-Type: text/plain; charset=utf-8
Connection: keep-alive
······

NGINX是如何配置生效的

我们可以看nginx.conf配置文件中有一段配置:

http {include       mime.types;default_type  application/octet-stream;···
}

application/octet-stream: 大多数浏览器会将其视为二进制文件并下载

default_type 仅适用于未在mime.types文件中定义的文件扩展名

首先nginx会读取mime.types 中定义好的 数据类型与文件类型关系。然后使用default_typemime.types 中未定义的的都设置为application/octet-stream:

官方是如何定义下载目录的

A sufficiently full mapping table is distributed with nginx in the conf/mime.types file.
To make a particular location emit the “application/octet-stream” MIME type for all requests, the following configuration can be used:location /download/ {types        { }default_type application/octet-stream;
}Syntax:	default_type mime-type;
Default:	
default_type text/plain;
Context:	http, server, location
Defines the default MIME type of a response. Mapping of file name extensions to MIME types can be set with the types directive.

location匹配规则不对导致配置不生效

nginx 在postread 阶段对它的配置文件解析,对location解析,是先进行前缀匹配,再进行一般匹配,一般匹配是按照最长匹配规则。

前缀匹配包含:

=	#精确匹配              匹配后不在进行匹配
^~	#                     匹配后不再进行正则匹配
~	#正则匹配   			  正则匹配是有顺序的
~*	#忽略大小写,正则匹配     正则匹配是有顺序的如果是^~开头的匹配,则不会继续搜索正则匹配,但是会继续搜索一般匹配
普通匹配:无顺序,是按匹配长短来确定的   
正则匹配:有顺序,是从前往后匹配的

少数浏览器导致配置不生效

各个浏览器对常用或者错误的 Content-Type 类型处理方式也有不一致的地方,比如edge,就能配置是否在浏览器中打开 Office 文件,有的浏览器因为特殊字符而导致文件下载。

Content-disposition 是什么

Content-disposition 是 MIME 协议的扩展,ontent-type 指示响应内容的格式;content-disposition` 指示如何处理响应内容。关于Content-Disposition: inline 可以 点击查看

参阅:

nginx常用配置方法

反向 ssl 代理 成功案例

各浏览器对常用或者错误的 Content-Type 类型处理方式不一致

服务器响应包含非法字符可能导致下载


http://www.ppmy.cn/news/142728.html

相关文章

vxe-grid尾行

Vxe-Grid是一个基于Vue.js的开源表格组件。在Vxe-Grid中,尾行是指表格的最后一行,通常用于显示统计信息或合计。如果您想显示表格的尾行,您可以使用Vxe-Grid的footer-render属性,并在其中定义自己的渲染逻辑。

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务 可以实现基于 redis 的 token 鉴权以及实现 rbac 鉴权。 转载请注明来源:https://janrs.com/vrsr Istio 的外部鉴权本质是基于 Envoy 实现的,直接看 Envoy 的代码,链接地址&…

让PHP更快的提供文件下载

一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件. 但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载. <?php $file "/tmp/dummy.tar.gz"; …

机器学习常识 13: PCA

摘要: 主成分分析 (principal component analysis, PCA) 是一种有理论依据的无监督特征提取的线性方法. 1. 特征选择与特征提取 特征选择是指从已有的特征里面选择出一个子集. 例如: 身高、体重、性别、年龄、体温、血相等等, 如果要一个人是否患流感&#xff0c;身高、体重等…

AMEYA360:纳芯微推出车规级耐高压、三线霍尔开关及锁存器NSM101x系列

纳芯微推出全新三线制车规霍尔效应开关/锁存器NSM101x系列&#xff0c;为数字位置检测提供高精度的解决方案&#xff0c;可被广泛应用于汽车执行器等的位置检测。 NSM101x产品系列包含了3个产品型号&#xff0c;即NSM1011(单极霍尔开关)、NSM1012(全极霍尔开关)、NSM1013(霍尔锁…

01 【Vue简介 初识Vue 模板语法和数据绑定】

01 【Vue简介 初识Vue 模板语法和数据绑定】 1.Vue简介 1.1官网 英文官网中文官网 1.2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 ○构建用户界面&#xff1a;把数据通过某种办法变成用户界面 ○渐进式&#xff1a;Vue可以自底向上逐层的应用&…

如何关闭windows杀毒软件

首先点击桌面左下角开始按键&#xff0c;点击“设置”图标; 找到并单击“更新和安全”选项; 在左侧列表中找到“windows安全中心”&#xff0c;右侧选中“病毒和威胁保护”选项; 4 最后在弹出窗口中下拉&#xff0c;找到“Windows Defender防病毒”选项&#xff0c;将开关…

疫情防护新时代-新型紫外线口罩消毒器

一次偶然的机会接触到一款非常新颖的电子产品-善电口罩消毒器&#xff0c;在这里分享给大家。善电口罩消毒器是专为防护疫情设计的黑科技产品&#xff0c;它采用的紫外线波长照射的方式口罩进行消毒。 外形方面&#xff0c;它采用的是流线型的设计风格&#xff0c;贴合人体的设…