系统上线以后,一些用户反应地图上面出现了<!--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 882java.lang.LinkageError: JAXB 2. ... -
[Extjs项目开发必须知道的技术之一]--apply和applyif
2011-06-15 13:18 1268目前本人在做公司项目的前台框架的升级工作,前台框架 ... -
JSON 入门指南
2011-06-14 14:52 1137简介: JSON 即 JavaScript Object Na ... -
J2EE 全面简介
2011-06-14 00:23 629J2EE的概念 目前,Java 2平台有3个版本,它们是适用 ... -
转《JSP与Servlet的区别》
2011-06-14 00:01 950一. Servlet是什么? 客户机/服务器计算的发 ... -
Oracle表空间相关
2011-06-11 11:39 6451、创建表空间 CREATE ... -
访问工程项目时,Extjs出现“拒绝访问”
2011-06-10 14:01 1475关于在IE中使用Extjs出现“拒绝访问”的问题 近段时间项 ... -
方法名为getXX()导致的后果
2010-12-02 20:21 704做项目的近段时间,遇见一个问题,纠结了好一段时间。 纠结的问 ... -
JPA调用存储过程
2010-08-14 10:41 1042要调用存储过程,我们可以通过EntityManager对象的c ... -
JPA简介
2010-08-14 10:39 939JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL ... -
OpenJPA的基础
2010-08-14 10:13 958在项目中我们公司用的持久化语言是JPA,周五为了 ... -
启动Eclipse的项目时出现java.lang.OutOfMemoryError错误
2010-07-28 20:11 1158今天解压一个Eclipse3.5,然后把项目发布到tomcat ... -
request.getParameter()
2010-07-26 20:46 779今天,做项目中的一个jsp页面,我的需求如下: 我需要将ur ... -
struts2与json的整合
2010-07-25 22:15 2809将jsonplugin-0.30.jar放到工程的lib下面, ... -
struts2的相关知识
2010-07-25 22:13 8941、在struts2.xml中配置的A ...
相关推荐
内网nginx正向代理外网,并实现高德地图:web资源服务器A,搭建nginx转发服务,和webJsAPI的字符替换,涉及两个包nginx-1.22.1.tar.gz、ngx_http_substitutions_filter_module-master.zip代理服务器B,搭建nginx外网...
### Nginx反向代理不能访问项目的解决办法 在配置Nginx作为反向代理服务器时,有时会遇到可以通过域名正常访问Linux系统下部署的Tomcat服务器,但是却无法访问到部署在Tomcat上的具体项目的情况。这种情况通常是...
Nginx 代理 SFTP 和 TCP 通讯测试 本文档测试 Nginx 代理 SFTP 和 TCP 协议通讯的结果,不包括 Nginx 的安装过程。下面详细介绍本文档中涉及到的知识点: 1. Nginx 代理 SFTP: Nginx 可以作为 SFTP 代理服务器,...
Nginx 是一款轻量级的 Web 服务器、反向代理服务器和电子邮件代理服务器,然而在实现跨域访问时,会遇到一些问题。本文将讨论 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进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
本文将详细介绍Nginx如何实现正向代理和反向代理,以及这两种代理方式的应用场景。 **正向代理** 正向代理的主要作用是让内部网络中的设备(如服务器B)通过一个具有外部网络访问权限的设备(如服务器A)来访问...
(这里是图片) 目录结构如上 2.在D:\nginx\目录下用记事本新建一个文本文档改名为 proxy.conf。 proxy.conf里面的内容格式如下: server { listen 80; server_name www.*****.com; location / { proxy_pass ...
总结一下,"squid和nginx配置正向代理访问API接口"涉及的关键知识点包括正向代理的概念、Squid和Nginx的代理功能、配置这两者的步骤、以及安全性控制和优化策略。正确配置和使用这两个工具可以帮助企业构建高效、...
使用nginx代理oracle或者网站,实现地址的跳转以及网站的统一门户和负载均衡。
8. **故障转移与扩展**:当集群中某台服务器出现问题时,Nginx会自动停止向该服务器发送请求,保证服务的连续性。随着业务增长,可以轻松地向集群中添加更多服务器以扩展容量。 通过以上步骤,我们能够构建一个高效...
问题 在之前的分享的跨域资源共享的文章中,有提到... 基于与合作方后台的配合,利用nginx方向代理来满足浏览器的同源策略来实现跨域 实现方法 反向代理概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受In
百度地图代理服务器,可做代理,使用百度JavaScript API,适合在没有外网访问条件的政府部门使用,使用方法: 1.将war包部署 2.引入js文件baiduMap.js 3.修改baiduMap.js中你的key 和代理服务器地址 4.完成,可以...
在Nginx反向代理一个带有WebSocket功能的Spring Web程序(源代码地址 )时,发现访问WebSocket接口时总是出现403响应,Nginx的配置参考的是 官方文档 : http { // ssl 相关配置 ... map $http_upgrade $...
使用nginx代理私有oss对象存储bucket桶,下载/访问文件。
- 如果出现问题,可以检查 Nginx 的错误日志,通常位于 `C:\nginx\logs\error.log`。 通过以上步骤,你可以在 Windows 系统上成功配置 Nginx 作为 Tomcat 的反向代理,并实现基本的功能需求。此外,还可以根据具体...
在IT行业中,Nginx是一款广泛应用的高性能反向代理服务器,常被用来作为Web服务器或者负载均衡器。本文将深入探讨“nginx代理前端服务”的配置和相关知识点。 首先,我们来看`nginx.conf`,这是Nginx的主要配置文件...
nginx代理功能十分强大,经常用来做反向代理,但有的实际工作环境需要正向代理,经安装发现网上常用的方法有两点问题,1.并不支持https代理,2需要访问的网址一但加上非80端口就会403报错。 后经反复测试,已找到...
附件为已在linux服务器上安装验证成功的源码安装包,成功实现了正向https代理、反向代理和图片代理功能。
百度离线瓦片 放入tomcat或者nginx中代理使用离线瓦片地图 在index.htm中引入 <script type="text/javascript" src="static/baidumapv2/baidumap_offline_v2_load.js"></script> 具体目录图片格式自己可以在 load...