今天有个需求,除了用nginx做TCP转发外,还要用于HTTP的转发,由于要和一些其他程序协作所以只能用Windows版本。原以为没什么问题,很快就改了配置文件,在测试服务器上试了一下,HTTP转发很正常。于是把这段配置抄到生产服务器上去,重新装载配置,端口打开了,就是没页面返回。于是考虑一下是不是要重启一下nginx,直接任务管理器杀掉进程,重新启动。结果,启动就报错了,而且不停地报错。看了一下,是nginx的工作进程有问题,自己退出,然后又被守护进程拉起来。赶紧把配置文件换回去,正常启动了。还好只中断了两分钟,没有用户反馈问题。
把服务器上报错的配置文件拿回本地测试,果然也是报错。经过对配置文件修改后发现,如果TCP反向代理设置到了37个,再使用http相关功能就会报错。这是个什么问题?于是换回nginx官方的windows版本,不报错了。只是这个版本的1024个连接数和只能起一个工作进程,也许哪天就会让我吐血的。
换个思路,我用一个nginx做TCP转发,另外一个做HTTP转发。于是按网上某些人的说法,分成两个文件夹,配置文件分成两个。第二个启动时报了个错误:“Assertion failed: ngx_shared_sockets->pid==pid, file src/core/nginx.c, line 334”。看来只能起一个啊,还有什么办法可以启动两个么?继续网上找,发现我用这个修改版本的作者在很早之前回答别人说可以启动两个,方法没给,只有编译后的二进制版本下载链接。给个源代码看看行不?再一看nginx开源协议BSD,人家不给也没什么问题。难道自己搞个官方版本去改?官方说将来会支持Completion Port和多进程有效,它从1.5的版本就这么介绍,现在1.15了,也没见动静。自己改的话,其他都不干估计也得好几个月,还不知道是不是稳定。为了杀个鸡,不仅用牛刀,还要自己造牛刀,这也是个技术人员的思维框框。
为什么要吊死在一棵树上呢?HTTP的转发用Apache不行么?确实被局限住了,总觉得nginx效率要好些,可是在windows上的这表现没法看啊。平时用tomcat习惯了,下个预编译好的版本自然就什么都有。今天发现HTTP Server官方没有提供Windows下的二进制版本,要我们自己下代码编译。不过还是提供了几个其他套件的下载地址,里面含有HTTP Server。都是Linux下的思维,看来服务器领域Windows是被歧视的。
下载完成,修改配置文件,部署,测试,效果还不错。