`
kuangxiangly
  • 浏览: 28812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Nginx代理之后,访问地图出现叉图的问题

 
阅读更多

系统上线以后,一些用户反应地图上面出现了<!--StartFragment-->叉图,有的用户比较严重,放大和缩小叉图都不能消失,经在甲方的电脑重现,计算机A重现了该现象,经过httpwatch监控和调试nginx,该问题始终得不到解决。通httpwatch进行监控时发现现象更怪异:当请求一个图片的url时,请求返回的状态码是200,内容也显示出来,但是在浏览器上面却出现叉图图,甚是无语,困扰了半个月之久。

今天也就是2012/10/10在网上无意发现了这个帖子,帖子内容如下:

NGINX 负载均衡的问题

nginx 负责均衡在高压力的高并发时候,会出现图片显示不正常,或者显示图片只有一半的情况。

在发现大图片在浏览器显示时不完整,sendfile 是其中的一个原因,sendfile 必须关闭,否则会出现权限不可读取的问题。

如果在关闭sendfile 后问题依旧,就需要排查nginx的缓冲区的问题了。

proxy_buffering

语法: proxy_buffering on|off

默认值: proxy_buffering on

上下文: http, server, location

proxy_buffering 设为 off 后问题解决。

记录一下,备忘。

我按照这种方式去做啦,但是rest服务尽然出现了叉图,最后我报着试试的态度,将缓存区的大小调大啦,内容:

    server {

        listen       80;

        server_name  172.16.32.73;

        location / {

                   root   html;

                   index  index.html index.htm;

                   proxy_pass                  http://backend; 

                   proxy_redirect              off;

                   proxy_set_header            Host $host;

                   proxy_set_header            X-Real-IP $remote_addr;

                   proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

                   client_max_body_size        10m;

                   client_body_buffer_size     328k;(默认128k

                   proxy_connect_timeout       90;

                   proxy_send_timeout          90;

                   proxy_read_timeout          90;

                   proxy_buffer_size           40k;(默认4k

                   proxy_buffers               4 320k;(默认4 32k

                   proxy_busy_buffers_size     640k; (默认64k

                   proxy_temp_file_write_size  640k; (默认64k

        }

在计算机A上面使用,竟然没有出现叉图,随即用户使用,也说没有发现叉图,现在自己心里也有了一点认识,在网上百度了一下这些参数的详细说明:

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

 

在一般的应用中,请求的文件和缓存不会太大,但是在对数据量大的图片进行访问时,如果你的缓冲区的大小过小的话,有可能导致ngnix响应浏览器的请求时,发生响应的中断,导致请求不到响应的结果,出现叉图。问题得以解决!!!

 

 

以下是Nginx的相关参数说明:

1、 proxy_buffering

语法:proxy_buffering on|off

默认值:proxy_buffering on

使用环境:httpserverlocation

功能:设置是否缓存后端服务器响应的内容。如果设置为on,那么nginx一旦从后端服务器读取了响应,它便会传递给客户端,同时会把响应数据存储在缓存中,使用内存空间来提供缓存,如果缓存使用完,那么响应数据就会存储到临时文件;如果设置为off,那么nginx将会在接收到后端服务器响应的同时就直接转发到客户端。Nginx不会尝试从后台的代理服务器读取整个响应,nginx能够从后台服务器接收的最大数据大小是用过proxy_buffer_size指令来设置的。

对于基于长时间轮询的Comet应用程序而言,则需要将该指令设置为off,否则异步响应数据被缓存而导致Comet无法工作。

通过设置在代理响应中的X-Accel-Buffering头,缓存可以被设置为基于每个请求的缓存。

2、 proxy_buffers

语法:proxy_buffers the_number is_size

默认值:proxy_buffers 8 4K/8K

使用环境:httpserverlocation

功能:设置缓存数据和大小,用于存放从后台服务器读取的响应数据。它的默认值是8个缓存。而每个缓存4kb8kb,依赖于你的平台。

3、 proxy_buffer_size

语法:proxy_buffer_size the_size

默认值:proxy_buffer_size  4K/8K

使用环境:httpserverlocation

功能:该指令用于设置缓冲区的大小,进入该缓存的数据是从被代理的服务器传来的(被读取的)响应数据的开始部分,一般来说,这部分内容是一些小的响应头。对于大小的设置,在默认情况下,该指令的值等于指令proxy_buffers设置的一个缓存的大小。

4、 proxy_busy_buffers_size

语法:proxy_busy_buffers_size size

默认值:proxy_busy_buffers_size  proxy_busy_buffer_size*2

使用环境:httpserverlocationif

功能:该指令在官方的wike中没有描述。在代理的所有缓存区中,即通过proxy_buffers设置的缓存区,在缓存区使用的过程中,当后台的数据在缓存区中堆积的数据超过这个指定的值时,那么它将被刷新,并且将缓存的数发送至客户端。在设置该指令的值时要注意,它的大小必须小于所有的proxy_buffers减去一个buffer的值,官方指导的大小是2倍的proxy_buffer_size

5、 proxy_max_temp_file_size

语法:proxy_max_temp_file_size size

默认值:proxy_max_temp_file_size 1G

使用环境:httpserverlocationif

功能:设置临时文件的最大值。当被请求的文件内容大于代理缓存的大小时,该文件会被存储到这个临时文件,但是如果被请求文件的内容大于这个值的时候,那么将会从上游的服务器(被代理的服务器)上直接同步传递,而不再使用代理缓存。该指令的默认值为1GB,如果设置为0,那么意味着禁止使用临时文件。

 

6、 proxy_max_temp_file_write_size

语法:proxy_temp_file_write_size size

默认值:proxy_temp_file_write_size proxy_buffer_size*2

使用环境:httpserverlocationif

功能:当设置了使用存储驱动器上的临时文件时,设置缓存区大小,就是说写入临时文件的写缓存区,设置它的目的在于防止一个worker进程在传递文件时长时间地阻塞临时文件。它的大小一般设置为2倍的proxy_buffer_size

7proxy_send_timeout

语法:

默认值:

使用环境:

功能:该指令用于设置将请求转发到代理服务器的超时时间,单位为秒。需要注意的是,这个超时不是完成传递整个请求的超时,而是两个写操作之间的超时间隔。如果在此时间之后上游服务器没有发送新的数据,那么nginx将会自动关闭。

8proxy_read_timeout

语法:

默认值:

使用环境:

功能:该指令用于设置读取后台代理服务器响应的超时时间,单位是秒,它决定了对于一个请求的响应,nginx服务器可以等待多久。需要注意的是,这个超时是指Tcp协议完成了两次握手协议之后,并且连续状态为Established之后的超时时间,它不是指的超时捕获的是后台服务器将放置的连接请求池中的请求,但是又为前端的nginx没有返回任何数据的这个超时时间。我们可以在不同的location中分别设置,以便能有一个高效的proxy_read_timeout设置。(需要注意的是:不 要将该指令的值设置的太低,因为代理服务器可能会花较长的时间来响应一个请求,这种情况并非偶然,比如,我们请求的页面可能需要花长时间的计算才能得出(毕竟不是静态页))

9proxy_connect_timeout

语法:

默认值:

使用环境:

功能:该指令用于指定连接后台服务器的一个超时时间。需要注意的是,这个timeout不能够超过75秒。这个时间不是等待服务器返回页面的时间,等待服务器返回页面的时间是由proxy_read_timeout指令设置的。如果后台服务器工作正常,但是由于请求被“悬挂”(例如:可能是没有足够的线程来处理该请求,因此就需要将请求暂时放在连接请求池内,等待处理)那么这个指令就是用于设置这个时间的。

分享到:
评论

相关推荐

    内网nginx正向代理外网,并实现高德地图,nginx-1.22.1、proxy、sub-filter、openssl

    内网nginx正向代理外网,并实现高德地图:web资源服务器A,搭建nginx转发服务,和webJsAPI的字符替换,涉及两个包nginx-1.22.1.tar.gz、ngx_http_substitutions_filter_module-master.zip代理服务器B,搭建nginx外网...

    Nginx反向代理不能访问项目的解决办法

    ### Nginx反向代理不能访问项目的解决办法 在配置Nginx作为反向代理服务器时,有时会遇到可以通过域名正常访问Linux系统下部署的Tomcat服务器,但是却无法访问到部署在Tomcat上的具体项目的情况。这种情况通常是...

    Nginx代理SFTP和TCP协议通讯测试.docx

    Nginx 代理 SFTP 和 TCP 通讯测试 本文档测试 Nginx 代理 SFTP 和 TCP 协议通讯的结果,不包括 Nginx 的安装过程。下面详细介绍本文档中涉及到的知识点: 1. Nginx 代理 SFTP: Nginx 可以作为 SFTP 代理服务器,...

    nginx实现跨域访问遇到的问题

    Nginx 是一款轻量级的 Web 服务器、反向代理服务器和电子邮件代理服务器,然而在实现跨域访问时,会遇到一些问题。本文将讨论 Nginx 实现跨域访问遇到的系统环境问题解决方法,并分享踩过的坑。 跨域是什么? -----...

    nginx代理转发配置,配置内网到外网访问

    #正向代理转发https请求 proxy_connect; #proxy_connect_allow all; proxy_connect_allow 443 563; proxy_connect_connect_timeout 120s; proxy_connect_read_timeout 120s; proxy_connec

    nginx反向代理导致session失效的问题解决

    两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...

    nginx正向代理与反向代理详解

    本文将详细介绍Nginx如何实现正向代理和反向代理,以及这两种代理方式的应用场景。 **正向代理** 正向代理的主要作用是让内部网络中的设备(如服务器B)通过一个具有外部网络访问权限的设备(如服务器A)来访问...

    一分钟搞定 Nginx反向代理 nginx域名代理

    (这里是图片) 目录结构如上 2.在D:\nginx\目录下用记事本新建一个文本文档改名为 proxy.conf。 proxy.conf里面的内容格式如下: server { listen 80; server_name www.*****.com; location / { proxy_pass ...

    squid和nginx配置正向代理访问API接口.rar

    总结一下,"squid和nginx配置正向代理访问API接口"涉及的关键知识点包括正向代理的概念、Squid和Nginx的代理功能、配置这两者的步骤、以及安全性控制和优化策略。正确配置和使用这两个工具可以帮助企业构建高效、...

    nginx配置代理oracle和网站

    使用nginx代理oracle或者网站,实现地址的跳转以及网站的统一门户和负载均衡。

    泛微EC搭建Nginx集群、代理

    8. **故障转移与扩展**:当集群中某台服务器出现问题时,Nginx会自动停止向该服务器发送请求,保证服务的连续性。随着业务增长,可以轻松地向集群中添加更多服务器以扩展容量。 通过以上步骤,我们能够构建一个高效...

    利用Nginx反向代理解决跨域问题详解

    问题 在之前的分享的跨域资源共享的文章中,有提到... 基于与合作方后台的配合,利用nginx方向代理来满足浏览器的同源策略来实现跨域 实现方法 反向代理概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受In

    百度地图代理服务器

    百度地图代理服务器,可做代理,使用百度JavaScript API,适合在没有外网访问条件的政府部门使用,使用方法: 1.将war包部署 2.引入js文件baiduMap.js 3.修改baiduMap.js中你的key 和代理服务器地址 4.完成,可以...

    详解Nginx反向代理WebSocket响应403的解决办法

    在Nginx反向代理一个带有WebSocket功能的Spring Web程序(源代码地址 )时,发现访问WebSocket接口时总是出现403响应,Nginx的配置参考的是 官方文档 : http { // ssl 相关配置 ... map $http_upgrade $...

    nginx代理私有oss对象存储bucket桶配置

    使用nginx代理私有oss对象存储bucket桶,下载/访问文件。

    windows下配置nginx反向代理tomcat

    - 如果出现问题,可以检查 Nginx 的错误日志,通常位于 `C:\nginx\logs\error.log`。 通过以上步骤,你可以在 Windows 系统上成功配置 Nginx 作为 Tomcat 的反向代理,并实现基本的功能需求。此外,还可以根据具体...

    nginx代理前端服务

    在IT行业中,Nginx是一款广泛应用的高性能反向代理服务器,常被用来作为Web服务器或者负载均衡器。本文将深入探讨“nginx代理前端服务”的配置和相关知识点。 首先,我们来看`nginx.conf`,这是Nginx的主要配置文件...

    nginx正向代理https和非80端口配置文档.pdf

    nginx代理功能十分强大,经常用来做反向代理,但有的实际工作环境需要正向代理,经安装发现网上常用的方法有两点问题,1.并不支持https代理,2需要访问的网址一但加上非80端口就会403报错。 后经反复测试,已找到...

    nginx正向https代理、反向代理、图片代理源码安装包

    附件为已在linux服务器上安装验证成功的源码安装包,成功实现了正向https代理、反向代理和图片代理功能。

    java+vue使用百度地图用代理方式访问瓦片

    百度离线瓦片 放入tomcat或者nginx中代理使用离线瓦片地图 在index.htm中引入 &lt;script type="text/javascript" src="static/baidumapv2/baidumap_offline_v2_load.js"&gt;&lt;/script&gt; 具体目录图片格式自己可以在 load...

Global site tag (gtag.js) - Google Analytics