nginx配置技巧汇总
Nginx作为文件服务
避免浏览器自动播放文件
有时对于图片、视频,浏览器会视能力,自动为用户显示或播放。这主要是由于Web服务器在返回文件本身数据的同时,返回了一些特殊的MIME类型,比如:image/jpeg
(JPEG图像),application/pdf
(PDF文档),video/mpeg
(MPEG动画)。这些MIMIE类型实际上是告诉浏览器,文件数据到底是什么,这样浏览器就能更好的为用户展示数据。现在像图片、pdf、甚至是视频基本都是可以直接在浏览器中展示和播放的。但是有时,我们需要浏览器为用户下载文件而不是直接播放,而Nginx在默认配置下,会根据文件的后缀来匹配相应的MIME类型,并写入Response header,导致浏览器播放文件而不是下载,这时需要通过配置让Nginx返回的MIME类型为下面这个类型:
application/octet-stream
这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件。可以通过在Nginx的配置文件中做如下配置达到这样的目的:
location /download/ {types { }default_type application/octet-stream; }
这样当Url路径中包含/download/
时,MIME类型会被重置为application/octet-stream
。另外,nginx自带的MIME类型映射表保存在conf/mime.types
中。
文件上传大小限制放开
有的时候后端的Web-Server提供文件上传的服务,但是如果前端使用Nginx做反向代理时,会出现文件无法上传的问题,这可能是由于Ngxin默认对客户端请求的body的限制。因为,默认情况下Nginx对客户端请求的大小限制是1m,而上传的文件往往超过1m。可以通过修改如下配置项,来放宽这个限制:
client_max_body_size 10m;
将这个值设置为0,可以取消这个限制。这个配置项可以用在http
, server
, location
配置节中。详见client_max_body_size
下载文件重命名
通常情况下,为了保证用户上传的文件在服务器的文件系统中不至于重名,一般会将文件名修改成guid后保存,并在数据库中保持guid与文件名的映射。此时,如果使用Nginx来提供对这些用户文件的下载功能的话,文件下载到用户浏览器,会以文件的guid名作为文件名,这显然是用户不想看到的。可以考虑用这个方案。
假设我们有一个文件的原始文件名为test.txt
,对应的guid文件名是21EC2020-3AEA-1069-A2DD-08002B30309D.txt
,文件的虚拟路径是/download/
使用服务器端编程语言,在输出的html中使用如下链接提供文件的下载:
<a href="/download/21EC2020-3AEA-1069-A2DD-08002B30309D.txt?n=test.txt" target='_blank'>下载test.txt</a>
可以看到,将原始文件名以QueryString的方式带在请求中,这样可以在Nginx端,利用$arg_name
变量来取到这个QueryString的值,从而重写response header:
add_header Content-Disposition "attachment; filename=$arg_n";
这会在response header中加入如下键值:
Content-Disposition: "attachment; filename=test.txt";
经测试,无论是IE还是Chrome都可以支持这个header。
关于Content-Disposition,详见这里
关于Nginx的标准http模块的嵌入变量,详见这里
Nginx作为反向代理
一个IP多个域名
如果只有一个公网IP,但是网站功能需要划分为多个不同的子网站或者子域名,可以用Nginx来搭建反向代理来“复用”IP资源。假设有如下几个域名都是abc.com这个主域的:
www.abc.comimage.abc.comvideo.abc.com
1. 首先在DNS出注册这3个域名同时指向同一个IP,Nginx作为前端的web服务器,让所有访问这个IP地址80端口的请求全部指向Nginx
2. 然后,配置Nginx,根据域名将请求转发转发给内网的上游服务器,例如下面的配置:
server { listen 80; server_name www.abc.com; location / { proxy_pass http://192.168.1.100;}} server { listen 80; server_name image.abc.com; location / { alias /var/www/image;}} server { listen 80; server_name video.abc.com; location / { proxy_pass http://192.168.1.100:8081/video;}}
在上述配置中,将三个域名分发给了不同的模块处理:
www.abc.com
分发给上游的http://192.168.1.100服务器处理image.abc.com
则直接映射到了Nginx本机的一个目录video.abc.com
分发给上游的http://192.168.1.100:8081/video服务器处理(video是上游web-server的某虚拟目录)
上游服务器超时
Nginx作为反向代理的时候,如果上游服务器处理时间过长的话,有时会返回504网关超时,从nginx的错误日志看出如果是upstream timed out,就表示是上游服务器处理时间过长,Nginx认为服务超时。Nginx在请求上游服务器时默认的超时时间为1分钟,可以通过调整proxy_read_timeout
属性增加这个超时时间
proxy_read_timeout 180s;
本文出自https://segmentfault.com/a/1190000000437323
转载于:https://blog.51cto.com/lookingdream/2118786
nginx配置技巧汇总相关推荐
- Nginx配置相关结构划分的技巧和禁止IP访问
Nginx配置相关结构划分的技巧 原文来自:http://developer.51cto.com/art/201003/190953.htm Nginx配置需要一定的技巧,我们在不断的使用和维护中就会 ...
- nginx 配置多个域名 指向不同服务_Nginx的几个常用配置和技巧
文章列举了几个Nginx常见的,实用的,有趣的配置,希望看过之后能说一句:学到了! 一个站点配置多个域名 server { listen 80; server_name ops-coffee.cn b ...
- nginx教程全集汇总(ttlsa出品)
为什么80%的码农都做不了架构师?>>> nginx教程写了一段时间,无意中发现,nginx相关文章已经达到了近100篇了.觉得很有必要汇总到一起,它是我们运维生存时间的一片心 ...
- php+php-fom+nginx配置参数调优详解
文章目录 一.前言 1.mysql配置参数: 2.注意 二.php参数配置及讲解 1.phpini的基本设置 2.php参数设置 三.php-fpm设置 1.设置子进程数,增加并发量 2.防止频繁出现 ...
- 三个案例看Nginx配置安全
之前在Sec-News中推荐了一个开源程序 https://github.com/yandex/gixy,作用是来检测Nginx配置文件中存在的问题.正好Pwnhub上周的比赛也出现了一道题,包含由 ...
- Nginx反向代理汇总
文章目录 一.二级域名代理tomcat 二.二级域名https实现 三.二级域名代理wss 三.代理静态文件 四.Nginx配置汇总 4.1 正向代理 4.2 反向代理 4.3 负载均衡 4.4 Ng ...
- Latex排版技巧汇总
Latex排版技巧汇总 一.前言 二.准备工作 1. Latex环境配置 2. 英文期刊Latex模板获取 三.Latex输入各种符号 四.Latex公式 1. 从Mathtype中获取不复杂公式的L ...
- Nginx配置及常用配置
文章目录 一.基本配置及配置说明 1.1 典型配置 1.2 全局变量(nginx内置预定义变量) 二.常用配置 2.1 反向代理配置 2.2 跨域CORS配置 2.2.1 使用反向代理解决跨域 2.2 ...
- RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总
RISC-V IDE MRS使用笔记(七) :常用开发技巧汇总 Q1: MRS调试时如何查看外设寄存器内容? A1: 在调试配置界面添加相应的.svd文件. Q2: MRS如何调用数学库? A2: # ...
最新文章
- Cisco无线AP上联口为trunk时无法注册故障处理
- PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment
- Android 中基本图像绘制
- ArcGIS地理坐标系与投影坐标系
- java商品列表展示_springMVC入门程序。使用springmvc实现商品列表的展示。
- 创建struct fib_info函数分析
- 京东健康股价创下新高 市值突破6000亿港元
- asio定时器深度探析
- python爬虫接口_python爬虫之百度API调用方法
- 高数_第2章多元函数微分学__偏导数的几何应用_空间曲线的切线与法平面
- 2012年度总结:内心宁静的2012
- postman tests
- Linux系统网络环境配置(初学者必看)!!
- CleanMyMac X4.20最新mac电脑优化工具好用吗?
- 实战版 天猫精灵接入指南(AliGenie接入)
- 大脑构造图与功能解析_大脑的结构和功能分区_详解人脑构造与功能
- 微信小程序如何支持分享给朋友和分享到朋友圈?如何解决分享朋友圈灰色问题
- 大学物理实验长度的测量实验报告_大学物理实验教案长度和质量的测量
- windows server 2012 使用包管理工具choco安装程序
- office哪个版本最好用、占用资源最少?
热门文章
- mysql5.6 函数索引_聊聊MySQL中的索引
- Google Guava官方教程
- java比较运算_Java比较运算符
- linux中mtools工具_Linux mtools命令
- matlab中(1 )什么意思,matlab中area(1)什么意?mat – 手机爱问
- svnadmin: e000002: 无法创建最上层目录_JFolder::create: 无法创建目录
- 用css如何写正方体,css正方体实现--(transform练习)
- oracle替换表merge,sql – Oracle – 如何使用merge根据其他表和列中的值更新列
- sqlserver2012不是有效的安装文件夹_SQL Server 2012软件安装说明
- Zookeeper分布式一致性原理(十一):Zookeeper在JStorm中应用