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
使用环境:http、server、location
功能:设置是否缓存后端服务器响应的内容。如果设置为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
使用环境:http、server、location
功能:设置缓存数据和大小,用于存放从后台服务器读取的响应数据。它的默认值是8个缓存。而每个缓存4kb或8kb,依赖于你的平台。
3、 proxy_buffer_size
语法:proxy_buffer_size the_size
默认值:proxy_buffer_size 4K/8K
使用环境:http、server、location
功能:该指令用于设置缓冲区的大小,进入该缓存的数据是从被代理的服务器传来的(被读取的)响应数据的开始部分,一般来说,这部分内容是一些小的响应头。对于大小的设置,在默认情况下,该指令的值等于指令proxy_buffers设置的一个缓存的大小。
4、 proxy_busy_buffers_size
语法:proxy_busy_buffers_size size
默认值:proxy_busy_buffers_size proxy_busy_buffer_size*2
使用环境:http、server、location、if
功能:该指令在官方的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
使用环境:http、server、location、if
功能:设置临时文件的最大值。当被请求的文件内容大于代理缓存的大小时,该文件会被存储到这个临时文件,但是如果被请求文件的内容大于这个值的时候,那么将会从上游的服务器(被代理的服务器)上直接同步传递,而不再使用代理缓存。该指令的默认值为1GB,如果设置为0,那么意味着禁止使用临时文件。
6、 proxy_max_temp_file_write_size
语法:proxy_temp_file_write_size size
默认值:proxy_temp_file_write_size proxy_buffer_size*2
使用环境:http、server、location、if
功能:当设置了使用存储驱动器上的临时文件时,设置缓存区大小,就是说写入临时文件的写缓存区,设置它的目的在于防止一个worker进程在传递文件时长时间地阻塞临时文件。它的大小一般设置为2倍的proxy_buffer_size。
7、proxy_send_timeout
语法:
默认值:
使用环境:
功能:该指令用于设置将请求转发到代理服务器的超时时间,单位为秒。需要注意的是,这个超时不是完成传递整个请求的超时,而是两个写操作之间的超时间隔。如果在此时间之后上游服务器没有发送新的数据,那么nginx将会自动关闭。
8、proxy_read_timeout
语法:
默认值:
使用环境:
功能:该指令用于设置读取后台代理服务器响应的超时时间,单位是秒,它决定了对于一个请求的响应,nginx服务器可以等待多久。需要注意的是,这个超时是指Tcp协议完成了两次握手协议之后,并且连续状态为Established之后的超时时间,它不是指的超时捕获的是后台服务器将放置的连接请求池中的请求,但是又为前端的nginx没有返回任何数据的这个超时时间。我们可以在不同的location中分别设置,以便能有一个高效的proxy_read_timeout设置。(需要注意的是:不 要将该指令的值设置的太低,因为代理服务器可能会花较长的时间来响应一个请求,这种情况并非偶然,比如,我们请求的页面可能需要花长时间的计算才能得出(毕竟不是静态页))
9、proxy_connect_timeout
语法:
默认值:
使用环境:
功能:该指令用于指定连接后台服务器的一个超时时间。需要注意的是,这个timeout不能够超过75秒。这个时间不是等待服务器返回页面的时间,等待服务器返回页面的时间是由proxy_read_timeout指令设置的。如果后台服务器工作正常,但是由于请求被“悬挂”(例如:可能是没有足够的线程来处理该请求,因此就需要将请求暂时放在连接请求池内,等待处理)那么这个指令就是用于设置这个时间的。
发表评论
-
Lucene专题1---Lucene简介
2012-09-05 13:37 0Lucene是一套用于全文检索和搜寻的开源程式库, ... -
JAXB 2.0 API is being loaded from the bootstrap classloader错误【转】
2012-09-05 11:48 808java.lang.LinkageError: JAXB 2. ... -
[Extjs项目开发必须知道的技术之一]--apply和applyif
2011-06-15 13:18 1239目前本人在做公司项目的前台框架的升级工作,前台框架 ... -
JSON 入门指南
2011-06-14 14:52 1116简介: JSON 即 JavaScript Object Na ... -
J2EE 全面简介
2011-06-14 00:23 606J2EE的概念 目前,Java 2平台有3个版本,它们是适用 ... -
转《JSP与Servlet的区别》
2011-06-14 00:01 928一. Servlet是什么? 客户机/服务器计算的发 ... -
Oracle表空间相关
2011-06-11 11:39 6271、创建表空间 CREATE ... -
访问工程项目时,Extjs出现“拒绝访问”
2011-06-10 14:01 1450关于在IE中使用Extjs出现“拒绝访问”的问题 近段时间项 ... -
方法名为getXX()导致的后果
2010-12-02 20:21 679做项目的近段时间,遇见一个问题,纠结了好一段时间。 纠结的问 ... -
JPA调用存储过程
2010-08-14 10:41 1010要调用存储过程,我们可以通过EntityManager对象的c ... -
JPA简介
2010-08-14 10:39 915JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL ... -
OpenJPA的基础
2010-08-14 10:13 928在项目中我们公司用的持久化语言是JPA,周五为了 ... -
启动Eclipse的项目时出现java.lang.OutOfMemoryError错误
2010-07-28 20:11 1137今天解压一个Eclipse3.5,然后把项目发布到tomcat ... -
request.getParameter()
2010-07-26 20:46 758今天,做项目中的一个jsp页面,我的需求如下: 我需要将ur ... -
struts2与json的整合
2010-07-25 22:15 2780将jsonplugin-0.30.jar放到工程的lib下面, ... -
struts2的相关知识
2010-07-25 22:13 8651、在struts2.xml中配置的A ...
相关推荐
解决配置Nginx反向代理后,可以通过域名访问Linux下部署的Tomcat,但却访问不到部署的项目问题
(这里是图片) 目录结构如上 2.在D:\nginx\目录下用记事本新建一个文本文档改名为 proxy.conf。 proxy.conf里面的内容格式如下: server { listen 80; server_name www.*****.com; location / { proxy_pass ...
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
使用nginx代理oracle或者网站,实现地址的跳转以及网站的统一门户和负载均衡。
squid和nginx配置正向代理访问API接口
百度地图代理服务器,可做代理,使用百度JavaScript API,适合在没有外网访问条件的政府部门使用,使用方法: 1.将war包部署 2.引入js文件baiduMap.js 3.修改baiduMap.js中你的key 和代理服务器地址 4.完成,可以...
百度离线瓦片 放入tomcat或者nginx中代理使用离线瓦片地图 在index.htm中引入 <script type="text/javascript" src="static/baidumapv2/baidumap_offline_v2_load.js"></script> 具体目录图片格式自己可以在 load...
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
nginx做正向代理,假设监听80端口,而一个用户请求的url带非80端口号,nginx会默认将该url请求转到80端口,百度了一番,网友提供的方法都无法解决问题,于是自己用lua解决了: 1、最多的解决方式就是在$host后面添加...
nginx代理前端服务配置文件
nginx代理解决项目跨域的问题,代理之后,同时做了负载的配置,相当于在代理的同时可以进行负载。解决了前后端分离跨域,接口端项目负载的配置。
nginx多网站反向代理
Nginx反向代理服务器配置基础教程
用nginx代理weblobic.pdf
https服务器nginx反向代理配置,SSL连接下的域名访问应用服务器配置
Nginx正向代理配置
通过使用Nginx 反向代理来解决JS跨域问题 http://blog.csdn.net/mzhaocai/article/details/79238338
作为一个GISer开发者,天地图是经常在项目中以底图的形式出现,其加载地址如: 1.天地图矢量:http://t{0-6}.tianditu.com/DataServer?T=vec_w&x={x}&y={y}&l={z} 2.天地图影像:...
1.查看80端口是否被占用,一般80端口多被apache服务占用。 netstat -anp|grep 80 2.修改apache服务的端口号 ...以上所述是小编给大家介绍的linux服务器上使用nginx访问本地静态资源的方法,希望对大家有所帮助!
最全配置,下載即用,nginx作为web服务器一个重要的功能就是反向代理。 当然你也可以使用nginx配置正向代理,本是介绍如何配置nginx的反向代理。 nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令...