又是新的一周,上周的最后两天一直在研究Nginx,并解决了一下项目组中的一些问题。
原本配置nginx和更改配置是其他人再搞,后来因为他在给java web项目(一个是后台管理的项目,一个是视频流推送的项目)的时候,发生了一些事情,就转到了我这里,说实话,我之前没有接触过Nginx,硬着头皮再搞。下面介绍一下这两个事情的经过。
第一个问题,后台管理的项目,他在做主备代理的时候发现了项目只能到登录页面,无法进行登录,更别说进行其他的操作了。
接到手的时候,首先可以肯定的是web项目一定不会有问题,测试10轮的项目,不会出现这么low的问题,我把nginx的主备访问地址都更改到我本地,然后就进行测试,通过跟代码,发现在Filter中有一个response,页面中是通过Ajax进行的请求的,因此,我就顺势在response里增加了一个变量,ajax的complete里接收该变量,测试发现返回的变量是null,然后用项目的本地真实路径访问的时候,发现可以接收我在后台添加的变量,然后我就去查看nginx.conf文件里的各个配置项(居然一个注释都没有),然后查找每一个配置项的意思和作用,最终定位到proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 这里,将其注掉,就会发现,无论是项目访问,还是主备切换,都会很顺畅,没有之前的问题了。
第二个问题,对于视频流推送的项目(每次推送的大小是固定1M)进行负载——轮询切换,发现基本就是第一次访问的时候是ok的,后续的访问就无法进行,查看了nginx的access.log文件,第一次去找的时候,发现居然没有这个日志,然后看一下配置文件里居然关闭了,打开重新reload,发现里面的访问,第一次是HTTP 返回的是200,证明访问成功了,后续的访问居然变成了206,记得206是断点续传range的标志位,居然在这里出现了,然后就去查找nginx的206状态,没有什么解决办法,换个思路,查找nginx的range,查找到代理的缓存、以及块大小等信息。代码如下slice 1m;proxy_cache_key $uri$is_args$args$slice_range; proxy_set_header Range $slice_range;proxy_cache_valid 200 206 1m;增加了如上的配置之后,视频流就可以正常的轮询切换了。
以上就是上周解决的nginx所遇到的问题,也是从对nginx一无所知,硬着头皮搞,当然现在也只是了解了一点皮毛而已。
通过上周的这个问题,发现无论解决什么问题,都要抓住关键点,具体问题具体分析。