`
bollaxu
  • 浏览: 216989 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nginx upstream 长连接

阅读更多

Nginx upstream目前只有短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connection" header设为"close"。Nginx与前端的连接默认为长连接,一个用户跟Nginx建立连接之后,通过这个长连接发送多个请求。如果Nginx只是作为reverse proxy的话,可能一个用户连接就需要多个向后端的短连接。如果后端的服务器(源站或是缓存服务器)处理并发连接能力不强的话(比如单进程的squid),就可能导致瓶颈的出现。

 

Nginx目前的upstream连接建立和获取的机制如下图。Nginx会在一开始创建connection pool(进程间不共享,可以避免锁),提供给所有向前/后的连接。


 

如果要实现upstream长连接,则每个进程需要另外一个connection pool,里面都是长连接。一旦与后端服务器建立连接,则在当前请求连接结束之后不会立即关闭连接,而是把用完的连接保存在一个keepalive connection pool里面,以后每次需要建立向后连接的时候,只需要从这个连接池里面找,如果找到合适的连接的话,就可以直接来用这个连接,不需要重新创建socket或者发起connect()。这样既省下建立连接时在握手的时间消耗,又可以避免TCP连接的slow start。如果在keepalive连接池找不到合适的连接,那就按照原来的步骤重新建立连接。假设连接查找时间可以忽略不计,那么这种方法肯定是有益而无害的(当然,需要少量额外的内存)。


 

具体如何来设计这个keepalive connection pool,不同人有不同的选择。比如Nginx目前的第三方模块upstream keepalive(作者Maxim Dounin)使用了一个queue来做。因为upstream的服务器很可能是多个,所以可能当保持的连接数多的时候,查找的时间可能会较长。可以给每个upstream服务器都分配一个pool(queue),缩短查找时间。但是总体来说内存操作很快,影响不会很大。upstream keepalive模块目前只支持memcached,但是可以重用其代码来达到对http upstream的长连接。在upstream模块和反向代理(二)里面highlight了一些改动的地方。由于Nginx作者之前没有考虑upstream的长连接,所以在设计上要把http upstream keepalive模块化可能比较难,只能通过手动修改代码来做到。

  • 大小: 47.2 KB
  • 大小: 60.7 KB
0
0
分享到:
评论

相关推荐

    Nginx反向代理实现支持长连接详解

    前言 Nginx upstream与后端的连接默认为短连接,通过HTTP/1.0向后端发起连接,并把请求...Nginx目前的upstream连接建立和获取的机制如下图。Nginx会在一开始创建connection pool(进程间不共享,可以避免锁),提供给所

    nginx优化之request_time 和upstream_response_time差别1

    nginx优化之request_time 和upstream_response_time差别笔者在根据nginx的accesslog中$request_time

    nginx_upstream_check_module-master.zip

    借助淘宝技术团队开发的nginx模快nginx_upstream_check_module来检测后方realserver的健康状态,如果后端服务器不可用,则会将其踢出upstream,所有的请求不转发到这台服务器。当期恢复正常时,将其加入upstream。 ...

    ngx_http_upstream_keepalive-d9ac9ad67f45.tar.gz

    nginx upstream 连接池 ngx_http_upstream_keepalive-d9ac9ad67f45.tar.gz

    nginx负载均衡配置,宕机自动切换方式

    严格来说,nginx自带是没有针对负载均衡后端节点的健康检查的,但是可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到健康节点来提供...

    决战Nginx系统卷:高性能Web服务器详解与运维第一部分(保证能用)

    第41章 通过Upstream模块使得Nginx实现后台服务器集群 第42章 根据浏览器选择主页 第43章 关于Nginx提供下载.ipa或.apk文件的处理方法 第44章 SCGI 第45章 Expires与ETag 第46章 使用upstream_keepalive模块...

    nginx for windows

    此版本nginx可以解决在windows平台上1024句柄的限制:maximum number of descriptors supported by select() is 1024 while connecting to upstream

    决战Nginx系统卷:高性能Web服务器详解与运维第二部分(保证能用)

    第41章 通过Upstream模块使得Nginx实现后台服务器集群 第42章 根据浏览器选择主页 第43章 关于Nginx提供下载.ipa或.apk文件的处理方法 第44章 SCGI 第45章 Expires与ETag 第46章 使用upstream_keepalive模块...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维第三部分(保证能用)

    第41章 通过Upstream模块使得Nginx实现后台服务器集群 第42章 根据浏览器选择主页 第43章 关于Nginx提供下载.ipa或.apk文件的处理方法 第44章 SCGI 第45章 Expires与ETag 第46章 使用upstream_keepalive模块...

    nginx 1.9 window 版本

    upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } ...

    Openresty_For_Windows_1.7.10.zip

    并发两万多个连接 多进程 支持共享内存 支持udp代理 与 nginx 原始版本相比修复的各种错误 它已符合这些官方模块: http_realip_module http_addition_module http_sub_module http_dav_module ...

    Nginx+Tomcat负载均衡

    upstream localhost { #ip_hash #ip_hash; server localhost:8081; server localhost:8080; } server { listen 80; server_name localhost; location / { proxy_connect_timeout 3; proxy_...

    网站安全狗Linux-Nginx版(32位)v2.4.2.gz

    3、新增对nginx_upstream_check_module-master 模块支持; 4、新增对nginx-backtrace-master 模块支持; 5、新增对ngx_http_accounting_module-master模块支持; 6、新增对3th_module/testcookie-nginx-module-...

    Django nginx配置实现过程详解

    django 在引入第三方模块的时候保证服务的... events配置域:网络连接相关配置(I/O模块) server配置域:相关服务节点配置 location http配置域 upstream配置域:反向代理配置域 层次关系 events { .... } http

    Nginx http运行状况健康检查配置过程解析

    对于被动健康检查,NGINX 和 NGINX Plus 会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,NGINX 开源版和 NGINX Plus 会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为...

    nginx配置https之后,https请求被调转到http问题

    upstream local_tomcat_wechat{  server 127.0.0.1:80 weight=2 fail_timeout=1s; }   server {  listen 443;  server_name www.xxxx.com;  error_log /nginx/log/www.xxxx.com.error.log  warn;  ssl on; ...

    详解Nginx服务器中的nginx.conf配置文件

    还有一些其他的配置段,如 event,upstream 等。 通用设置  user nginx  指定运行 nginx workre 进程的用户和组  worker_rlimit_nofile #  指定所有 worker 进程能够打开的最大文件数  worker_cpu_affinity  ...

    python-fastcgi-nginx-configuration:Python FastCGI + Nginx 配置

    使用最智能的配置与 Nginx 进行负载平衡( upstream指令)。安装安装 Nginx 配置后,确保有接收 pid 文件的目录。 mkdir /var/run/wsgisample只需使用以下命令启动守护程序。 /etc/init.d/wsgi-sample start

    Nginx反向代理及负载均衡如何实现(基于linux)

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个...

Global site tag (gtag.js) - Google Analytics