windos nginx curl 超时

来源:互联网 发布:三拼域名 不值钱 编辑:程序博客网 时间:2024/06/06 03:02

问题:windows 系统下 curl 当前windows下面的其他项目就会发生超时,卡死的现象,只有当timeout过后 服务器才会恢复正常

可能引起的结果: nginx的vhosts 大量配置  fastcgi_pass   127.0.0.1:9000;  或者配置了  fastcgi_pass   127.0.0.1:9001/9002 不存在的端口

结论:经过查询资料得出的结论是在nginx中,请求都是keep-alive的,就是当我项目A操作test.php系统时,通过nginx进入socket进入A后进行解析,使用9000端口,这时使用curl访问项目B的index.php文件时(项目也使用了  fastcgi_pass   127.0.0.1:9000 端口),那么会造成端口被占用,访问超时。


图1

解决:vhosts大量配置的fastcgi_pass   端口不重复 , 比如分别使用9000~9003(默认不自动启动)

编写BAT文件,内容为:

@echo off  
start cmd /k "C:\phpStudy\php56n\php-cgi.exe -b 127.0.0.1:9001 -c C:\phpStudy\php56n\php.ini"  
start cmd /k "C:\phpStudy\php56n\php-cgi.exe -b 127.0.0.1:9002 -c C:\phpStudy\php56n\php.ini"  

每次重启后都需要启动一下bat文件, 有点麻烦。。有更好的办法可以建议一下 微笑



#注:nginx介绍

1.介绍  Nginx 

    高性能web server,这个不用多说了,大家都知道。
    FastCGI程序 - 常驻型CGI程序,它是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
    Nginx要调用FastCGI程序,需要用到FastCGI进程管理程序(因为nginx不能直接执行外部的cgi程序,我们可使用lighttpd中的spawn-fastcgi来让nginx可支持外部cgi运行。也有其他方法安装nginx-fcgi来让nginx支持cgi,这里是使用spawn-fastcgi的方法),来达到调用FastCGI程序的目的。Nginx本身没有集成类似的模块,而Apache具备该功能模块,所以不需要额外安装FastCGI进程管理程序。


2.工作原理
    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。
    当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端。这就是Nginx+FastCGI的整个运作过程,如图1所示。