案例一:nginx转发后,报表访问正常但是访问平台失败
现象:访问模板正常,访问平台失败
原因:nginx.conf默认是用的是http1.0,tcp连接生命周期不够,导致一些耗时较长的图表请求超时。http1.1才支持长连接 ,不配置的话默认走了http1.0;
解决方案:给nginx.conf文件的配置:
- proxy_http_version 1.1;
- proxy_set_header Connection ";
案例二:502 Bad GateWay
现象:访问模板或平台会报错502 Bad GateWay
原因:502 Bad Gateway这个是错误网关,无效网关。查看nginx相关设置,做了nginx的反向代理,原因是header过大,超出了默认的1k,就会引发上述的upstream sent too big header。(说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。)
解决方案:
设置参数:
proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size
如:
server {
listen 80;
server_name *.lxy.me;
location /
{ ###############添加这3行
proxy_buffer_size 64k;
proxy_buffers 256 32k;
proxy_busy_buffers_size 128k;}
详细说明:
(1)proxy_buffer_size
作用:Nginx使用该大小申请read_buf,即大小指定了 upstream header 最大长度,如果响应头超过了这个长度,Nginx会报upstream sent too big header错误,然后client收到的是502。
(2)proxy_buffers
作用:设置存储被代理服务器响应的body所占用的buffer个数和每个buffer大小。当前buf不够存响应body时才会新申请一个,最多申请256个buf。
(3)proxy_busy_buffers_size
作用:用来设置处于busy状态的buffer有多大。proxy_busy_buffers_size不是独立的空间,他是proxy_buffers和proxy_buffer_size的一部分。nginx会在没有完全读完后端响应就开始向客户端
传送数据,所以它会划出一部分busy状态的buffer来专门向客户端传送数据(建议为proxy_buffers中单个缓冲区的2倍),然后它继续从后端取数据。如果完整数据大小小于busy_buffer大小,当数据传输完成后,马上传给客户端;如果完整数据大小不小于busy_buffer大小,则装满busy_buffer后,马上传给客户端。
详细可见:https://www.cnblogs.com/wshenjin/p/11608744.html
案例三:504 Gateway Time-out
现象:做了nginx转发,数据比较多的报表导不到本地,显示导出准备,完成后本地没有报表,F12查看有504报错
原因:网页请求超时,也就是浏览网站网页所发出的请求没有反应或者未响应。nginx.conf或者php-fpm.conf设置不合理。
解决方案:根据服务器性能状况及网络流量情况,对nginx.conf中的下列字句进行设置:
fastcgi_connect_timeout300s;
fastcgi_send_timeout300s;
fastcgi_read_timeout300s;
fastcgi_buffer_size128k;
fastcgi_buffers8128k;
#8128fastcgi_busy_buffers_size256k;
fastcgi_temp_file_write_size256k;
fastcgi_intercept_errorson;
这些字句的设置规定了PHP-CGI的连接、发送和读取时间限制,需根据服务器性能及网络流量综合考虑设置。
【注】时间设置过长会给网站服务器造成压力,导致网站响应缓慢,甚至服务器宕机;时间设置过短,则就会出现504 Gateway Time-out或者其他CGI无响应错误。
【小结】 报错504 Gateway Time-out,一般有以下两种:
1)nginx默认的fastcgi进程响应缓冲区太小,fastcgi进程被挂起
默认的fastcgi进程响应的缓冲区是8K,设置大一点,在nginx.conf里,加入:fastcgi_buffers 8 128k(设置fastcgi缓冲区为8块128k大小的空间)
若还是出现问题,继续修改nginx的超时参数,将参数调大一点,如设置为60秒: send_timeout 60
2)PHP环境的配置问题
根据PHP程序情况及服务器带宽状况 设置 max_children 与 request_terminate_timeout 两个重要参数,注意:
- request_terminate_timeou设置在900s左右使php-cgi进程处理脚本的超时时间提高到900秒,防止进程被挂起以提高利用效率)
- max_children值根据服务器内存大小和CGI请求数目设置为合理的数值,一般设置为800M左右(保证有充足的php-cgi进程可以被使用)
修改完后都需重新加载配置,具体修改可参照:https://jingyan.baidu.com/article/2c8c281d9680760008252a8a.html
案例四:远程设计,大模板无法保存
现象:不是所有模板都无法报存,而是特别卡的模板无法保存,因此直接判断是因为模板比较大在传输时无法保存。后来检查了nginx的日志,找到了:client intended to send too large chunked body: 1048576+4096 bytes, client: 10.210.45.237, server: localhost, request: "POST /webroot/decision/remote/design/channel HTTP/1.1", host: "10.61.3.181:8090"
原因:从报错看出因为文件太了保存时被nginx拦截了
解决方案:在nginx的http里加了这行client_max_body_size 100M;
案例五:使用nginx转发之后的链接访问首页空白
现象:使用nginx端口访问tomcat,现象,首页空白,前端报错,net::ERR_INCOMPLETE_CHUNKED_ENCODING
原因:百度报错,和temp缓存文件的权限有关系。
解决方案:使用root启动的nginx,最后在nginx.conf中将第一行的 user root; 注释去掉,前端不出现报错了,首页也正常了。
案例六:使用nginx转发之后,图表加载不出来
现象:使用nginx转发之后,图表加载不出来
原因:负载均衡策略选错了
解决方案:upstream FR .com { }中添加了ip_hasp;解决了图表加载不出来的问题。
案例七:nginx转发端口丢失,导致平台访问不到
现象:访问不了平台
原因:nginx配置有问题,导致转发端口丢失
解决方案:在nginx的配置中,location中加上这个参数:proxy_set_header Host $host:$server_port 即可。
案例八:nginx反向代理导致微信集成移动端无法访问
现象:微信集成移动端访问不到页面,报错The plain HTTP request was sent to HTTPS port
原因:https被读取成了http
解决:在nginx反向代理里加入重定向,在server下的端口监控下给配置文件nginx.conf添加语句proxy_redirect http:// https://;给配置文件nginx.conf添加语句(示例如下):proxy_redirect http://12.99.215.240:9080/ https://moboatest.nbcb.com.cn:11180/;
参考:https://blog.csdn.net/u010391029/article/details/50395680
注:添加语句后需重启nginx才能生效
案例九:nginx配置短域名后serverName参数获取不到域名
现象:使用了nginx,导致在报表里面使用serverName参数获取不到域名,获取到的是nginx配置的短域名
解决:可以使用js获取域名,location.host,参考:通过JS获取当前页面URL网址信息-https://help.fanruan.com/finereport/doc-view-2175.html
案例十:配置反响代理,直接通过域名访问登录不了工程
环境:
1)做了tomcat下访问ip直接进入op=fs界面的设置,这个参考文档http://help.finereport.com/doc-view-806.html;
2)做了域名设置;
3) Nginx反向代理设置,参考文档http://help.finereport.com/doc-view-2438.html
现象:
不做Nginx反向代理设置,可以直接访问http://bi.doitfintech.com:8080进入报表系统;
加了Nginx反向代理设置,无法进入报表系统了;
报错:
113.108.10.16 - - [04/Jul/2018:15:11:29 +0800] "GET /ReportServer?op=fs HTTP/1.0" "-"302 0 "https://bi.doitfintech.com/" "Wget/1.10.2" "-" 49.76.206.253 - - [04/Jul/2018:15:11:30 +0800] "GET / HTTP/1.1" "-"200 323 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 49.76.206.253 - - [04/Jul/2018:15:11:30 +0800] "GET /ReportServer?op=fs HTTP/1.1" "-"302 0 "https://bi.doitfintech.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-" 49.76.206.253 - - [04/Jul/2018:15:11:30 +0800] "GET /favicon.ico HTTP/1.1" "-"404 1016 "https://bi.doitfintech.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" "-"
原因:设置1中做的tomcat下访问ip直接进入op=fs界面的设置,其中需要写一个a.jsp,就是解决从根路径直接访问项目的,这个jsp做了一个302的重定向,但是nginx这边不管处理或者不处理都不能获取这个302的资源。
解决方案:把a.jsp干掉,让nginx来处理302重定向就可以
编辑于 2021-6-24 15:29
|