php nginx curl 超时,问题总结:php-curl在nginx中访问超时,在CLI环境正常

为了测试本地php代码,由于电脑内存限制,无法运行虚拟机,于是搭建了本地web服务调试环境Windows、Nginx、php-cgi、mysql

由于xdebug调试服务9000端口已占用,所以php-cgi使用了9001端口,在nginx配置中需要做响应更改

1 fastcgi_pass 127.0.0.1:9001;

启动服务:

nginx> start /b nginx.exe

nginx> net startmysql56

nginx> cdpath_to_php

php> php-cig.exe -b 127.0.0.1:9001

停止服务

php> Ctrl+C^

php> cdpath_to_nginx

nginx> netstop msyql56

nginx> nginx.exe -s stop

一直以来跑的都很顺畅,今天突然遇到了问题,发现在php中有curl请求的时候,通过nginx访问请求会超时,在CLI环境中正常。

因为本地只启了一个php-cgi进程,在用户访问一个php页面的时候nginx已将该进程占用,在该进程又发起http请求时,nginx发现这个仅有的进程已被占用而造成阻塞,就这样造成了死锁,一直到超时。

解决办法就是启动多个php-cgi进程,答主给出了一个他写的python管理脚本:spawn-php.py,下载后运行发现找不到win32process模块,于是又到百度搜索win32process安装包,在杨青个人博客上看到了地址,博主也纳闷在百度搜索win32process安装包,总是出现一些不相关的东西,于是就把地址记录了下来。

下载对应本地python版本的安装包,安装完成,运行spawn-php.py脚本时遇到了几个小问题,脚本是为python2写的,本地装的是python3.4,所以有两点需要改下:

print作为函数使用,要加上括号

dict没有iteritems属性了,直接使用items属性即可

运行脚本 spawn-php.py 9001 10 启动10个php-cgi进程127.0.0.1:[9001-9010]。

20180920043233196498.png

修改nginx配置

1 upstream php_farm {2 server 127.0.0.1:9001 weight=1;

3 server 127.0.0.1:9002 weight=1;

4 server 127.0.0.1:9003 weight=1;

5 server 127.0.0.1:9004 weight=1;

6 server 127.0.0.1:9005 weight=1;

7 server 127.0.0.1:9006 weight=1;

8 server 127.0.0.1:9007 weight=1;

9 server 127.0.0.1:9008 weight=1;

10 server 127.0.0.1:9009 weight=1;

11 server 127.0.0.1:9010 weight=1;

12 }13 # ...

14 fastcgi_pass php_farm;

重新载入nginx配置

1 nginx> nginx.exe -s reload

运行正常!

原文:http://www.cnblogs.com/gudaojuanma/p/php-curl-nginx-timeout-cli-work.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你在 Docker 启动 Nginx 并尝试使用 curl 命令访问 127.0.0.1 时,可能会出现 "curl: (56) Recv failure: Connection reset by peer" 的错误。这个错误通常表示在客户端和服务器之间的连接被对等方(peer)重置。 有几种可能的原因导致这个问题。首先,你需要确保 Nginx 服务已经正常启动并监听了正确的端口。你可以使用命令 "docker ps" 来查看正在运行的容器和它们所映射的端口。如果端口映射没有配置正确,那么在通过 curl 访问时就会出现连接重置的问题。 另一个可能的原因是你在 Docker 容器内部访问本地主机的 IP 地址。在 Docker ,容器内部的网络是隔离的,它们具有自己的 IP 地址空间。因此,当你在容器内尝试访问本地主机的 IP 地址时,容器会认为这是一个外部连接,并尝试通过网络连接到该地址。然而,由于容器没有直接访问主机的网络权限,所以会导致连接重置的问题。 为了解决这个问题,你可以尝试使用容器的 IP 地址或容器名称来代替本地主机的 IP 地址。你可以使用命令 "docker inspect <container_id>" 来获取容器的 IP 地址,然后使用该地址进行 curl 请求。另外,你也可以尝试在容器内部使用主机网络模式来解决该问题。 综上所述,当你在 Docker 容器启动 Nginx 并尝试使用 curl 访问 127.0.0.1 时,出现 "curl: (56) Recv failure: Connection reset by peer" 错误可能是由于端口映射配置不正确或在容器内部访问本地主机 IP 地址导致的。你可以检查端口映射是否正确配置,并尝试使用容器的 IP 地址或容器名称进行 curl 请求来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【docker启动nginx无法访问curl: (56) Recv failure: Connection reset by peer](https://blog.csdn.net/qq_43680114/article/details/131800351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [curl: (56) Recv failure : Connection reset by peer](https://blog.csdn.net/Dontla/article/details/131798085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值