Nginx下请求本机另外Host很慢怎么办

技术Nginx下请求本机另外Host很慢怎么办这篇文章给大家分享的是有关Nginx下请求本机另外Host很慢怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。现象在本机安装了一个Discuz

这篇文章是关于当Nginx请求本地机器,而主机运行缓慢时该怎么办。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。

00-1010在这台机器上安装了一个Discuz!在X3.4的论坛中,使用UCenter作为统一用户登录。在其应用程序管理页面上,通信状态始终提示为“正在连接”:

Nginx下请求本机另外Host很慢怎么办

00-1010关于这个问题,网上绝大多数的说法都是Windows上的nginx服务器有问题,建议换成Apache。当我换成Apache的时候,问题确实解决了,但是我还是觉得nginx不会有这个问题,一定有解决的办法。

继续搜索,发现nginx日志中报告了一个499错误。在线上,据说499错误的原因是客户端主动与服务器断开连接。但是,看了ucenter的代码,似乎没有断线操作,但是看了日志报告的时间,我们发现了一个线索:

127 . 0 . 0 . 1--[18/Jul/2018 :22:35336048 0800]' GET/UC _ server/admin . PHP?m=appa=ls…

127 . 0 . 0 . 1--[18/Jul/2018 :22:36336019 0800]' GET/API/UC . PHP?代码=434 ermr/D/tjz 357 v3s a9 rlpqp0rpgfi 7 ryntpyveyeyay 3 xgen 8 oqk 9 etjgexnbyebkithypzqs HTTP/1.0 ' 499…

127 . 0 . 0 . 1--[18/Jul/2018 :22:36336019 0800]' GET/UC _ server/admin . PHP?m=appa=pinginajax=1url=…

日志的第一行是到ucenter应用程序管理中心页面的链接。在此页面中,ucenter向本地Discuz服务器发送通信验证请求(第三行日志),而第二行日志是Discuz服务器收到的通信验证请求,这一行出现499错误。

仔细看这三个日志的时间,我们发现第二个和第三个日志与第一个日志的时间间隔差不多是29秒。我们知道,PHP的默认超时时间是30秒,在统计一些错误时,29秒几乎是一样的。因此,可以认为这个499错误是由discuz服务器的499错误引起的,因为ucenter服务器发起了ping请求(第3行日志),从未收到返回值,因此超时并断开连接。

整个过程如下:

Nginx下请求本机另外Host很慢怎么办

知道是499错误,就找怎么解决499问题。因此,他们中的大多数人建议向nginx服务器添加以下配置:

proxy _ ignore _ client _ abort on

fastcgi _ ignore _ client _ abort on

上述配置已添加到Discuz的配置项中:

位置~ \。php $ {

root c :/PHPackage/workspace/github/DiscuzX/BBS;

fastcgi _ pass 127 . 0 . 0 . 1:9090;

index.php指数;

fastcgi _ param SCRIPT _ FILENAME $ document _ root $ fastcgi _ SCR

ipt_name;

            include        fastcgi_params;

            proxy_ignore_client_abort  on;

            fastcgi_ignore_client_abort on;

          }

再运行服务器,发现499问题果然没了,但是通信问题依然没有解决,只是日志变为如下了:

127.0.0.1 - - [18/Jul/2018:22:35:48   +0800] "GET /uc_server/admin.php?m=app&a=ls&…

127.0.0.1 - - [18/Jul/2018:22:36:19   +0800] "GET   /api/uc.php?code=434eRMR%2FD%2FtjZ357V3sA9RLPqp0rpGfi7ryntpyVEEYay3xgen8Oqk9ETjgEXNbyEbKItHYPZqs   HTTP/1.0" 200 …

127.0.0.1 - - [18/Jul/2018:22:36:19   +0800] "GET /uc_server/admin.php?m=app&a=ping&inajax=1&url=…

配置生效了,但是有个毛用啊,通信还是不成功。第1条日志和下面两条日志还是差了差不多30秒左右。回过头来仔细分析上面的两个配置项,应该是让nginx服务器忽略客户端断开的错误,注意,仅仅是让服务器忽略这个错误,也就是说,当ucenter请求超时,断开连接的时候,discuz服务器忽略了这个错误,从而返回200,可是ucenter实际上已经断开了,也收不到discuz的返回值,所以实际上还是通信失败。

不过再进一步分析上面的流程,从nginx与php的关系来看,发现整个请求处理如下图:

Nginx下请求本机另外Host很慢怎么办

nginx收到请求后,发现是需要执行PHP代码,于是将请求就转给了PHP-CGI进程,由该进程找到PHP代码并执行,但是在PHP代码中,又再次向本机的另一个服务器发出HTTP请求,nginx收到后,发现同样要执行PHP代码,于是将请求又转回给PHP-CGI进程,但是系统中PHP-CGI进程只开了一个,后面的PHP代码要等到上面的执行完毕才能执行,而后面的PHP代码却又是上面的代码请求产生的,于是就阻塞了。

1.1.3  解决

分析至此,解决的思路就已经很清晰了,既然一个PHP-CGI线程处理不过来,那么就增加一个线程好了,修改启动nginx服务器的批处理代码如下,仅修改一个数字,见红色字体部分:

@echo off

REM Windows 下无效

REM set PHP_FCGI_CHILDREN=5

 

REM 每个进程处理的最大请求数,或设置为 Windows 环境变量

set PHP_FCGI_MAX_REQUESTS=1000

 

echo Starting PHP FastCGI...

rem RunHiddenConsole   C:/PHPackage/PHP/php-cgi.exe -b 127.0.0.1:9090 -c C:/PHPackage/PHP/php.ini

RunHiddenConsole xxfpm   "C:/PHPackage/PHP/php-cgi.exe -c C:/PHPackage/PHP/php.ini" -n 2 -i 127.0.0.1 -p 9090

 

echo Starting nginx...

RunHiddenConsole   C:/PHPackage/nginx-1.15.1/nginx.exe -p C:/PHPackage/nginx-1.15.1

该数字原来是1,现在改为2,重新启动服务器,看任务管理器,果然有两个PHP-CGI进程:

Nginx下请求本机另外Host很慢怎么办

再回到ucenter的应用管理页面,刷新,结果如下:

Nginx下请求本机另外Host很慢怎么办

啥情况?我们上面折腾了半天,只是从“正在连接”变成了“通信失败”,问题还是没有解决啊!

不过呢,跟踪代码可以验证,499的问题的确是彻底解决了,至于为什么还是“通信失败”,那是另外一个问题了。

感谢各位的阅读!关于“Nginx下请求本机另外Host很慢怎么办”这篇文章就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/115161.html

(0)

相关推荐

  • 怎样进行Unity中GUI控件的调用

    技术怎样进行Unity中GUI控件的调用怎样进行Unity中GUI控件的调用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GUI控件:1.在

    攻略 2021年11月11日
  • 空间认证,谁能告诉我怎么弄腾讯认证空间

    技术空间认证,谁能告诉我怎么弄腾讯认证空间腾讯与2010年11月10日正式宣布认证QQ空间已经向所有QQ用户开放申请了,只要你是QQ空间用户就可以申请认证空间了,至于申请认证空间有什么用我们在文章的最后给大家分析下. 先

    生活 2021年10月20日
  • VB.NET Web Service怎么用

    技术VB.NET Web Service怎么用这篇文章将为大家详细讲解有关VB.NET Web Service怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.Web Servi

    攻略 2021年12月1日
  • rocketmq可视化界面讲解(rocket可视化报表)

    技术如何进行ROCKET的数据可视化如何进行ROCKET的数据可视化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。图形化操作,布局灵活,所见

    攻略 2021年12月24日
  • C++ 小记

    技术C++ 小记 C++ 小记新学了一下类相关的东西。C++ 小记新学了一下类相关的东西。class
    这东西叫类,看起来和 int,double 这些类型是一样的,int 存的是一个数,class 里面

    礼包 2021年11月12日
  • 如何实现对Samba UAF和内存泄漏漏洞的分析

    技术怎么实现Samba UAF和内存泄露漏洞的分析怎么实现Samba UAF和内存泄露漏洞的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。0x00 事件

    攻略 2021年12月22日