Nginx下,请求本机另外Host很慢 精选 原创 tywali 2018-09-28 23:13:13 博主文章分类:PHP ©著作权 文章标签 Nginx UCenter Discuz! 文章分类 后端开发 ©著作权归作者所有:来自51CTO博客作者tywali的原创作品,请联系作者获取转载授权,否则将追究法律责任 现象在本机安装了一个Discuz!X3.4的论坛,其使用UCenter作为统一用户登录,在其应用管理页面,通信情况一直提示为“正在连接”: 原因关于这个问题,网上绝大多数的说法是nginx服务器在Windows上有问题,建议更换为Apache,我更换到Apache下,也确实是问题解决了,但是我还是觉得nginx不至于有这种问题,一定有解决的办法。 再继续查找,发现nginx日志里有报告499错误,网上说499错误的原因是客户端主动断开了与服务器的连接,可是看ucenter的代码,貌似并没有断开连接的操作,倒是看日志报告的时间,发现一点端倪: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" 499 …127.0.0.1 - - [18/Jul/2018:22:36:19 +0800] "GET /uc_server/admin.php?m=app&a=ping&inajax=1&url=… 第1行日志,是ucenter应用管理中心页面的链接,在这个页面里,ucenter向本机的Discuz服务器发出通信验证请求(第3行日志),而第2行日志,就是Discuz服务器收到的通信验证请求,499错误就是出现在此行。 仔细查看这3条日志的时间,发现第2、3条与第1条间隔差不多29秒,我们知道,PHP默认的超时时间为30秒,算上点误差,29秒也差不多。因此可以认为这个499错误是因为ucenter服务器发起了ping请求(第3行日志),一直没有接收到返回值,结果超时断开连接,从而导致discuz服务器出现499错误。 整个流程如下图:知道是499错误,于是又查找如何解决499问题,结果大多数提出要在nginx服务器中添加如下配置:proxy_ignore_client_abort on;fastcgi_ignore_client_abort on; 在Discuz的配置项中添加了上述配置:location ~ \.php$ { root C:/PHPackage/workspace/github/DiscuzX/bbs; fastcgi_pass 127.0.0.1:9090; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_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收到请求后,发现是需要执行PHP代码,于是将请求就转给了PHP-CGI进程,由该进程找到PHP代码并执行,但是在PHP代码中,又再次向本机的另一个服务器发出HTTP请求,nginx收到后,发现同样要执行PHP代码,于是将请求又转回给PHP-CGI进程,但是系统中PHP-CGI进程只开了一个,后面的PHP代码要等到上面的执行完毕才能执行,而后面的PHP代码却又是上面的代码请求产生的,于是就阻塞了。 1.1.3 解决分析至此,解决的思路就已经很清晰了,既然一个PHP-CGI线程处理不过来,那么就增加一个线程好了,修改启动nginx服务器的批处理代码如下,仅修改一个数字,见红色字体部分:@echo offREM 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.iniRunHiddenConsole 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进程: 再回到ucenter的应用管理页面,刷新,结果如下: 啥情况?我们上面折腾了半天,只是从“正在连接”变成了“通信失败”,问题还是没有解决啊!不过呢,跟踪代码可以验证,499的问题的确是彻底解决了,至于为什么还是“通信失败”,那是另外一个问题了,请参见《Unable to find the socket transport "http"》。 赞 收藏 评论 分享 举报 上一篇:PHP代码编译为OPCODE 下一篇:Unable to find the socket transport "http" 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 C/C++ 发送与接收HTTP/S请求 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。它是一种无状态的、应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组(IETF)定义的,它是基于客户端-服务器模型的协议,其中客户端向服务器发送请求,服务器以相应的数据作为响应。HTTP 协议是建立在 TCP/IP 协议之 HTTP HTTPS C语言 网络请求 Python如何接收键盘按键 简介在许多编程场景中,接收并响应用户输入是至关重要的。Python作为一种流行的编程语言,具有许多灵活的方法来处理键盘输入。本文将介绍如何使用Python来监听和响应键盘按键,从基础的概念到实际的代码示例。基础概念在开始编写代码之前,我们首先需要了解几个基本概念:键盘事件:键盘事件是指用户在键盘上按下或释放按键时发生的事件。按键码:每个按键都对应着一个唯一的按键码,用于识别按下的是哪个键。事件循环 键盘事件 Python 热键 springboot集成微信模块,演示消息的发送和接收 集成微信模块并处理不同类型的消息涉及对微信消息格式和接口有深入的理解。在Spring Boot应用中,你可以使用weixin-java-mp库来简化与微信API的交云。以下是处理文本、图片、视频等不同类型的消息,并进行响应的Spring Boot演示程序。步骤1:依赖添加首先确保你的pom.xml中包含了微信公众号开发的SDK依赖。<dependency> <groupI springboot 微信模块 android开机广播不能接收到 # Android开机广播不能接收到的原因及解决办法## 引言在开发 Android 应用程序时,我们经常会遇到需要在设备开机后执行一些特定操作的情况。Android 系统提供了开机广播(Boot Complete Broadcast)来满足这个需求。然而,有时候我们会遇到开机广播不能接收到的问题,这可能会导致我们的应用无法在设备开机后正确执行相关操作。本文将讨论可能导致该问题的原因,并给 开机广播 广播接收器 Android java 接收请求实体套实体能接收嘛 # Java 接收请求实体套实体能接收嘛作为一名经验丰富的开发者,我将教会你如何实现 Java 接收请求实体套实体的功能。在本文中,我将逐步介绍整个实现流程,并提供每一步所需的代码和注释。让我们开始吧!## 实现流程为了更好地理解整个实现流程,我将使用以下表格展示每个步骤及其详细说明。| 步骤 | 描述 || ---- | ---- || 1 | 创建请求实体类 || 实体类 嵌套 字段 java处理接收到的post请求 # Java处理接收到的POST请求## 1. 流程图使用甘特图表示整个流程如下:```mermaidgantt title Java处理接收到的POST请求 section 接收请求 接收请求 :a1, 2022-09-01, 1d 解析请求参数 :a2, after a1, 1d section 处理请求 验证请求 java 请求参数 ide python进程接收到中断请求 # 如何在Python进程中接收中断请求## 整体流程下面是实现在Python进程中接收中断请求的整体流程:```mermaidpie title 流程图 "创建信号处理函数" : 25 "注册信号处理函数" : 25 "进程主体运行" : 50```## 步骤详解1. 创建信号处理函数首先,我们需要创建一个信号处理函数,用于接收和处理中 信号处理 中断请求 python android app能接收到恢复出厂设置的广播吗 # Android App如何接收到恢复出厂设置的广播作为一名经验丰富的开发者,我将教会你如何实现Android App能接收到恢复出厂设置的广播。以下是整个流程的步骤:1. 注册Broadcast Receiver:在AndroidManifest.xml文件中注册一个Broadcast Receiver来接收恢复出厂设置的广播。2. 实现Broadcast Receiver:创建一个 恢复出厂设置 App Android asp.net WebApi不能接收到Put和Delete请求,试图发送Put和Delete请求时得到405异常 情况如标题所述。Visual Studio 2013 Utimate,windows 8.1 64bit,Asp.NET 405 webapi 405 字符串 asp.net 数据 java Requestbody能接收string 如何实现Java RequestBody能接收String在Java开发中,我们经常会使用到网络请求来获取或提交数据。在进行网络请求时,我们通常会使用RequestBody来传递数据。RequestBody是一个用于封装请求体的类,它可以接收不同类型的数据,包括String。那么,如何实现Java RequestBody能接收String呢?接下来,我将为你详细介绍实现的步骤和代码示例。整 Java 数据 JSON .net core 管道能接收,dto无法接收 ## .NET Core 管道能接收,DTO 无法接收在进行 Web 开发时,我们常常需要处理客户端发送过来的数据。而在 .NET Core 中,我们可以使用管道来接收和处理这些数据。然而,有时候我们可能会遇到一个问题,就是管道能够成功接收数据,但是无法将其传递给我们定义的数据传输对象(DTO)。本文将详细介绍这个问题,并提供一些解决方案。### 管道的基本工作原理在 .NET Cor 数据 数据转换 解决方案 android收到广播启动 android开机广播不能接收到 Android应用如何开机自启动、自启动失败原因本文主要介绍Android应用如何开机自启动、自启动失败的原因、adb命令发送BOOT_COMPLETED。 问题:应用程序是否可以在安装后自启动,没有ui的纯service应用如何启动?答案马上揭晓^_* 1、Android应用如何开机自启动 (1)、在AndroidManifest.xml中注册AndroidManifest.xml中注册BOOT android收到广播启动 android 开机广播 自启动 应用程序 android 程序未启动也能接收广播 android开机广播不能接收到 这几天在做一项目,开机即开启服务,在服务里检测设备的系统版本是不是最新的,有新版本时,弹一个对话框提醒用户更新系统。好死不死,真机我用的小米2进行的测试,然后问题来了。具体的怎么开机就能启动服务不是很难,添加权限,注册开机广播,注册服务,按部就班的来就行,在我这个笔记中不再多记录,贴一个网址,里面有详细的记录,以后自己方便找到:Android问题解决之小米手机接收不到开机广播 (侵立删 android 程序未启动也能接收广播 小米手机 开机广播 接收不到 自启动 10 android 开机广播 android开机广播不能接收到 前面的文章 Android 开机广播的使用 中已经提到Android的开机启动,但是在Android 4.0 有时可以接收到开机启动广播,有时却不可以。经过分析发现,如果应用程序安装上始终没有被打开过,那么在Android启动时,该应用无法接收到开机启动广播android.permission.RECEIVE_BOOT_COMPLETED。原来在Android 3.1的更新文档中已经做了 10 android 开机广播 Android 开机广播 应用程序 开机启动 9 Android 开机广播 android开机广播不能接收到 对于Android的低版本接受不到开机广播主要有以下几个问题:一.没有给应用添加权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />这个不是主要原因,因为经测试,即便是不加这个权限也可以收到系统广播二.应用安装到了SD卡中,这种情况出现的机会也不多三.(个别情况)手机或模 9 Android 开机广播 Android 应用程序 android 开机启动 nginx 接收post请求 nginx获取请求url 请求过程 用户在本地通过浏览器页面发起请求,请求经过nginx代理,转发到SpringCloud框架的微服务A模块,A服务模块通过Feign调用服务提供者B模块 实现功能 在B模块中想要获取到用户主机的真实ip地址,以及浏览器页面上的请求路径 遇到问题 1、由于经过nginx代 nginx 接收post请求 nginx spring spring cloud java Android 14开机广播自启动 android开机广播不能接收到 今天进行了手机屏幕亮屏、暗屏、屏幕开锁、WIFI和移动网络状态改变、开机等广播的功能实现,其中遇到了一个问题,就是无论如何,屏幕亮屏、暗屏的广播都接收不到。这是因为我在AndroidManifest.xml采用了静态 注册的缘故。事实上,对应屏幕亮屏、暗屏的广播,必须通过代码动态注册 才可以获取到广播,这是系统做出的限制。下面贴出实例代码:MainActivity.java类:package co Android 14开机广播自启动 android 开机广播 ide nginx接收请求调用java程序 nginx的请求 HTTP 连接建立和请求处理过程HTTP 连接建立和请求处理过程如下:Nginx 启动时,Master 进程,加载配置文件。Master 进程,初始化监听的 Socket。Master 进程,Fork 出多个 Worker 进程。Worker 进程,竞争新的连接,获胜方通过三次握手,建立 Socket 连接,并处理请求。Nginx 高性能、高并发Nginx 为什么拥有高性能并且能够支撑高并发?Ng nginx接收请求调用java程序 Nginx nginx 客户端 android 发送广播外部应用能接收到吗 android中广播接收者的作用 Android面试收集录2 1.Broadcast Receiver广播接收器简单介绍1.1.定义Broadcast Receiver(广播接收器),属于Android四大组件之一在Android开发中,Broadcast Receiver的应用场景非常多。广播,是一个全局的监听器,属于Android四大组件。 Android 广播分为两个角色:广播 Android Android面试收集录 广播接收者 android App postman发送post请求,后端无法接收到参数 不能使用form-data,而是选择x-www-form-urlencoded 参考:https://blog.csdn.net/u010572493/article/details/81943485 https://www.bilibili.com/read/cv4343058/ ... API Javascript