nginx常见问题集锦

楼主
分享常见解决方案,仅供个人参考使用!
案例一: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  
分享扩散:

沙发
发表于 2021-6-24 20:49:18

回帖奖励 +20

板凳
发表于 2021-6-25 08:00:07

回帖奖励 +20

地板
发表于 2021-6-25 09:54:05

回帖奖励 +20

5楼
发表于 2021-6-28 13:06:08

回帖奖励 +20

6楼
发表于 2021-6-28 15:00:22

回帖奖励 +20


收藏了!
7楼
发表于 2021-7-1 10:55:52

回帖奖励 +20

8楼
发表于 2021-7-5 17:57:28

回帖奖励 +20

9楼
发表于 2021-7-6 11:52:02
好东西!
10楼
发表于 2021-7-27 18:13:56

回帖奖励 +20

向大佬学习!!!
11楼
发表于 2021-7-31 20:08:49

回帖奖励 +20

感谢楼主分享,支持一下!
12楼
发表于 2021-8-3 08:40:34

回帖奖励 +20

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表