资讯专栏INFORMATION COLUMN

nginx配置技巧汇总

scq000 / 3060人阅读

摘要:本文记录了一些作为反向代理和文件服务器的配置技巧和解决方案,原文会持续更新作为文件服务避免浏览器自动播放文件有时对于图片视频,浏览器会视能力,自动为用户显示或播放。

本文记录了一些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中使用如下链接提供文件的下载:

下载test.txt

可以看到,将原始文件名以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.com
image.abc.com
video.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://www.ucloud.cn/yun/39068.html

相关文章

  • Nginx+PHP-FPM优化技巧总结

    摘要:同时配置中的为,默认为。表示监控所有核心,表示每秒采集,表示采集次。则考虑使用或等加速器来减少解释文件的耗时。程序性能监控常用的方法就是开启的性能监控功能,将输出结果通过软件分析。输出的文件名类似和,可以拿到平台下用进行图形化分析。 Nginx+PHP-FPM优化技巧总结 这里是从网上找到的一片文章,认真的实践了一遍,有很多值得参考的地方可以学习,由于之前的文章排版非常混乱,所以本人一...

    Zhuxy 评论0 收藏0
  • Nginx+PHP-FPM优化技巧总结

    摘要:同时配置中的为,默认为。表示监控所有核心,表示每秒采集,表示采集次。则考虑使用或等加速器来减少解释文件的耗时。程序性能监控常用的方法就是开启的性能监控功能,将输出结果通过软件分析。输出的文件名类似和,可以拿到平台下用进行图形化分析。 Nginx+PHP-FPM优化技巧总结 这里是从网上找到的一片文章,认真的实践了一遍,有很多值得参考的地方可以学习,由于之前的文章排版非常混乱,所以本人一...

    gaosboy 评论0 收藏0
  • Nginx+PHP-FPM优化技巧总结

    摘要:同时配置中的为,默认为。表示监控所有核心,表示每秒采集,表示采集次。则考虑使用或等加速器来减少解释文件的耗时。程序性能监控常用的方法就是开启的性能监控功能,将输出结果通过软件分析。输出的文件名类似和,可以拿到平台下用进行图形化分析。 Nginx+PHP-FPM优化技巧总结 这里是从网上找到的一片文章,认真的实践了一遍,有很多值得参考的地方可以学习,由于之前的文章排版非常混乱,所以本人一...

    luffyZh 评论0 收藏0
  • Web前端必备-Nginx知识汇总

    摘要:安装简单配置简洁启动快速便捷支持热部署支持拥有高度模块化的设计。备注在版本之前,不能在中使用权重。不能与同时使用。当有服务器需要剔除,必须手动掉。表示把请求转发给连接数较少的后端服务器。表示当前的暂时不参与负载均衡。表示预留的备份机器。 本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发、Nodejs、Python、Lin...

    whatsns 评论0 收藏0
  • 困扰已久的问题cgi、fastcgi、PHP-fpm汇总

    摘要:通过或在服务器上运行时可以使用的可执行文件,可以理解为解释器也有说是官方的进程管理器,至于是什么文章后面再分析,这里就当作解释器。就是为了解决的问题,制定的协议。 一个模糊的概念 无论是php,python编程语言,还是apache,nginx服务器对于cgi协议是个绕不开的话题。安装,部署都会经常的看到,那么它们到底是干什么的,网上的答案非常的多!今天通过它们进行一波汇总,彻底告别这...

    nidaye 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<