背景:
反向代理使用openresty监听80端口,上游使用nginx(部署的dlib静态资源)监听8080端口。然后在openresty的配置增加:proxy_bind 127.0.0.1:8089.(特殊场景需要,固定openresty的转发访问端口为8089,而不是系统随机生成的端口)
使用:
浏览器中访问http://openresty/,此访问请求,会有很多静态资源css、图片的请求,一共8个请求,发现有3个报500响应。
问题:
在openresty的error.log下,看到报:bind(127.0.0.1:8089) failed (98: Address already in use) ,详细如下:
2019/10/08 00:31:45 [crit] 14417#14417: *56 bind(127.0.0.1:8089) failed (98: Address already in use) while connecting to upstream, client: 192.168.236.1, server: localhost, request: "GET /dlib.css HTTP/1.1", upstream: "http://127.0.0.1:8080/dlib.css", host: "192.168.236.130", referrer: "http://192.168.236.130/"
请教下,如何解决?另外这种情况下,是不是同时只能一个用户的浏览器访问?
展开
作者回复: 浏览器同时建立最多6个TCP连接至openresty,而openresty反向代理时也会建立6个TCP连接。每个TCP连接是四元组,其中openresty的IP固定、端口8090固定,上游nginx的IP固定、端口8080固定,那么同一时间只能建立一个TCP连接,第二个就会报bind失败,完全没有并发性。关于TCP连接详见《Web协议详解与抓包实战》第5部分课程。