写在前面

最近,一名读者跟我说他通过浏览器访问自己的服务器时,图片显示的非常慢,以至于在浏览器中都无法完全加载出来,下载文件时,更是恼火,文件根本就无法完全下载下来。而且奇怪的是这位读者所在的网络是没啥问题的。于是,我便开始帮他排查各种问题。。。

问题定位

经过一系列的排查(中间过程我就省略了,直接写重点了!),最终定位到是Nginx的问题。当我打开这位读者的网站后台管理系统,发现图片显示非常慢,在Nginx前端代理上查出如下错误信息。

[error] 28423#0: *5 connect() failed (111: Connection refused) while connecting to upstream

直接在后台服务器上用后台服务器的IP地址去访问,发现速度相当快,于是怀疑是Nginx的配置问题。

注意:当下载大的附件,或是页面中有大图片时,就会下载中断或是图片无法显示,也许你会说我用的Nginx缺省的配置也从来没有碰到过这种问题呀!我想说的是:那是因为你的网站没有大文件,至少没有大到使用Nginx的默认配置加载不出来。

这里,我给出一段Nginx的配置,如下所示。

location /file {
root /home/file;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080 ;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}

其中几个重要的参数如下所示。

  • proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
  • proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
  • proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
  • proxy_buffer_size 32k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
  • proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
  • proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
  • proxy_temp_file_write_size 16k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

看到这里,发现问题了,这位读者的Nginx有下面一行配置。

proxy_temp_file_write_size 16k;

而他服务器上的图片基本都在100K~5M之间。

问题就出在proxy_temp_file_write_size上,当服务器上的文件超过该参数设置的大小时,Nginx会先将文件写入临时目录(缺省为Nginx安装目下/proxy_temp目录),缺省Nginx是以nobody身份启动的,用ls -al 命令查看proxy_temp目录 nobody是proxy_temp目录的所有者,怪了那为什么没权限呢?接下来查看proxy_temp的父目录既Nginx安装目录。发现nobody竞然没权限,怪不得会出现上面的问题。

解决问题

定位到问题,接下来解决问题就比较简单了。可以使用两种方式解决这个问题,如下所示。

  • 设置任何人都可以写 proxy_temp目录,重启 Nginx 即可解决。
  • 直接更改proxy_temp_file_write_size的值,将其修改为大于图片和文件的大小,重启Nginx。

如果是以第一种方式解决问题的话,比如我的proxy_temp目录是/usr/local/nginx/proxy_temp,用如下命令将/usr/local/nginx/proxy_temp目录设置为任何人都可以写,问题解决。

chmod -R 777 /usr/local/nginx/proxy_temp/

如果是使用第二种方式解决问题的话,就可以直接修改nginx.conf文件,如下所示。

location /file {
root /home/file;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080 ;
client_max_body_size 100m;
client_body_buffer_size 256k;
proxy_connect_timeout 1200;
proxy_read_timeout 1200;
proxy_send_timeout 6000;
proxy_buffer_size 32k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 10m;
}

当然,我也帮这位读者优化了一些其他的配置项。

好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!!

写在最后

如果你觉得冰河写的还不错,请微信搜索并关注「 冰河技术 」微信公众号,跟冰河学习高并发、分布式、微服务、大数据、互联网和云原生技术,「 冰河技术 」微信公众号更新了大量技术专题,每一篇技术文章干货满满!不少读者已经通过阅读「 冰河技术 」微信公众号文章,吊打面试官,成功跳槽到大厂;也有不少读者实现了技术上的飞跃,成为公司的技术骨干!如果你也想像他们一样提升自己的能力,实现技术能力的飞跃,进大厂,升职加薪,那就关注「 冰河技术 」微信公众号吧,每天更新超硬核技术干货,让你对如何提升技术能力不再迷茫!

【Nginx】图片显示过慢,文件下载不完全,竟然是Nginx的锅!!的更多相关文章

  1. struts2图片显示

    struts2图片显示即是文件下载 一.配置struts.xml struts.xml中配置stream结果类型,并配置contentType.inputName.contentDisposition ...

  2. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

  3. 用nginx图片缓存服务器

    图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很: 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能 ...

  4. 4.C#WinForm基础图片(显示和隐藏)

    要求: 软件上有一张图片,默认是隐藏的.用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁,则显示图片. 知识点: 取当前年份,Date Time Now ...

  5. jQuery css3鼠标悬停图片显示遮罩层动画特效

    jQuery css3鼠标悬停图片显示遮罩层动画特效 效果体验:http://hovertree.com/texiao/jquery/39/ 效果图: 源码下载:http://hovertree.co ...

  6. nginx图片处理

    前言 不管一个系统或网站的大与小,都存在相应的图片处理,生成缩略图.为图片加水印等等,如果涉及到APP端,这个图片的处理需求变得更加重要了,因为在目前看来,客户端的屏幕大小不一,会导致以下问题: 1. ...

  7. Latex图片显示问题(1)

    用latex编译后,若用dvipdf生成pdf文件,则其中有个eps图的左侧会显示不完全:若是用dvips--pspdf生成pdf文件,图像显示没问题. 这种情况的问题出在,加载 graphicx 宏 ...

  8. WPF 图片显示中的保留字符问题

    在WPF中显示一张图片,本是一件再简单不过的事情.一张图片,一行XAML代码即可. 但是前段时间遇到了一件奇怪的事: 开发机上运行正常的程序,在某些客户机器上却显示不了图片,而且除了这个问题,其它运行 ...

  9. JS控制图片显示的大小(图片等比例缩放)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. Redhat FreeIPA Server 安装服务端和客户端 (实验:VMware环境下)

    实验环境:windows7 + vmware 15 + redhat 71:准备2台虚拟机:      虚拟机VMnet8,Subnet IP:192.168.145.0      Redhat 7( ...

  2. 入门大数据---Hive分区表和分桶表

    一.分区表 1.1 概念 Hive 中的表对应为 HDFS 上的指定目录,在查询数据时候,默认会对全表进行扫描,这样时间和性能的消耗都非常大. 分区为 HDFS 上表目录的子目录,数据按照分区存储在子 ...

  3. 使用nginx配置域名及禁止直接通过IP访问网站

    前段时间刚搭建好个人网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻. 1. nginx配置域名及禁止直接通过IP访问 先来 ...

  4. ubuntu添加新的分辨率选项(干货)

    ubuntu默认可选的分辨率不能够满足我的需求,在这里记录增加1440*900分辨率的过程 1. 终端输入: cvt 1440 900 2. 修改配置文件: vim /etc/profile xran ...

  5. Python实用笔记 (9)高级特性——列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, ...

  6. c++ string 用法

    //char *和string 转换: string str="1234567; const char *p = str.c_str(); //不过这是的 *p 是const类型,不能对他进 ...

  7. Java设计模式十九——责任链模式

    责任链模式 老李的苦恼 每个人在出生的时候,都早已在暗中被标好了三六九等. 老李是一名建筑工地的木匠,和大多数生活在社会最底层的农民工一样,一辈子老实本分,胆小怕事.在他们的心中,谁当老爷都没有区别, ...

  8. Apache POI 操作Excel(2)-- POI包引入项目

    Apache POI发行版包含对许多文档文件格式的支持.这种支持在几个Jar文件中提供.并非每种格式都需要所有jar.下表显示了POI组件.Maven存储库标记和项目的Jar文件之间的关系. (htt ...

  9. 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...

  10. day08获取图片

    wxml: <!--pages/publish/publish.wxml--> <text>pages/publish/publish.wxml</text> &l ...