zoukankan      html  css  js  c++  java
  • [nginx] 如何设置proxy到upstream的长连接

    前言

    1. 如下内容将讨论nginx做proxy代理client访问http server的过程。

    2. 这里的长连接是指keepalive,指的是http的keepalive,区别与tcp的keepalive。

    问题框架

    从client经过作为proxy的nginx访问http server时,涉及到2条连接,5个组件。

    两条连接为,client到proxy,proxy到server。我们在这里更关心的是,如何让后边的连接为长连接。

    五个组件为,client,nginx server, nginx proxy module, nginx upstream module, http server。

    背景

    我们已知,http1.1为了解决http1.0的效率问题,引入和长连接。

    在header里带上一个Connection字段,value等于Keep-Alive,接到header的一方就会知道对方想长连接。

    否则这个字段的值就是Close。然后http server就知道对方不希望长连接,他就会close TCP,在发完http response之后。

    如:

    [root@T9 OUTPUT]# curl -v -H "Connection: keep-alive" http://192.168.7.9:5001/
    * About to connect() to 192.168.7.9 port 5001 (#0)
    *   Trying 192.168.7.9...
    * Connected to 192.168.7.9 (192.168.7.9) port 5001 (#0)
    > GET / HTTP/1.1
    > User-Agent: curl/7.29.0
    > Host: 192.168.7.9:5001
    > Accept: */*
    > Connection: keep-alive
    > 
    < HTTP/1.1 301 Moved Permanently
    < Server: Nginx
    < Date: Thu, 10 Sep 2020 11:12:37 GMT
    < Content-Type: text/html; charset=utf-8
    < Transfer-Encoding: chunked
    < Connection: keep-alive
    < X-Powered-By: PHP/7.4.8
    < X-Content-Type-Options: nosniff
    < Vary: Accept-Encoding, Cookie
    < Expires: Thu, 01 Jan 1970 00:00:00 GMT
    < Cache-Control: private, must-revalidate, max-age=0
    < Last-Modified: Thu, 10 Sep 2020 11:12:37 GMT
    < Location: http://localhost/index.php?title=%E9%A6%96%E9%A1%B5
    < 
    * Connection #0 to host 192.168.7.9 left intact
    [root@T9 OUTPUT]# 

    方法

    现在的问题是,我们如何让作为proxy的nginx与后端建立长连接。

    基于前边讲的背景,我们要让proxy发出的请求带上 connection:keep-alive的header。

    这个事情涉及到前边讲到的三个组件

    nginx proxy module, nginx upstream module, http server

    http server需要支持http1.1,没有其他要求。

    proxy module需要配置如下两个参数:

            server {
                    listen 0.0.0.0:5001;
                    location / {
                       proxy_pass http://httpt7/;
                       proxy_http_version 1.1;
                       proxy_set_header Connection "";
    
                    }
            }

    因为默认proxy module设置了CONNECTION close的header。

    upstream module需要设置,keepalive参数,代表同时存在的最多长连接数,没有该参数将不会启动长连接:

            upstream httpt7 {
                    server 192.168.7.1:80;
                    keepalive 3;
            }

    另外,curl keepalive的方法

    curl -v -H "Connection: keep-alive" http://192.168.7.9:5001/
  • 相关阅读:
    jquery的get方式发送AJAX请求
    原生JS发送AJAX请求
    正则表达式(二)
    正则表达式(一)
    旅游攻略-北京三日游攻略(已实践)
    边旅游边赚钱的噱头,这是一种传销!
    hdu 1106 排序(水题)
    hdu 1258 Sum It Up(dfs+去重)
    hdu 1455 Sticks(dfs+剪枝)
    解决“LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”问题
  • 原文地址:https://www.cnblogs.com/hugetong/p/13648710.html
Copyright © 2011-2022 走看看