nginx用户请求反向代理流程

Posted syf-com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx用户请求反向代理流程相关的知识,希望对你有一定的参考价值。

 

保障后端业务正常运行,通过nginx实现多级代理,后端业务官网 小程序 APP H5等

场景:

  192.168.0.55   SLB01

  192.168.0.42   SLB02

  192.168.0.4   WEB01

SLB01配置代理SLB02:prot80

技术图片

 

 

SLB02配置代理后端真实web节点

技术图片

 

后端web节点配置如下 技术图片

 

ps:为了精简配置文件把所有的配置参数放在了nginx 同一级目录proxy_params里面

流程梳理

以上我们配置好了nginx多级代理 来看下代理请求的流程

三台服务器执行 

tailf /var/log/nginx/access.log or tail -f /var/log/nginx/access.log可看到实时输出的日志

slb01日志输出会根据用户输入的url解析对应的ip地址,根据本地产生的随机端口进行tcp连接和发起GET请求和location中的配置代理ip和prod进行向请求(proxy_set_header)头部消息后端的SLB02转发,SLB接收到之后会在本地产生随机端口请求后端web的80端口建立tcp连接,后端收到之后会同时给代理服务器和用户数据

技术图片

 

 

SBL02日志

技术图片

 

 技术图片

 

 比较官方的说法

1.当HTTP请求交给Nginx处理时,首先Nginx会取出header头中的Host (此处也就是 www.baidu.com),然后将其与所有的配置文件中的每个server段中的server_name进行匹配,以此决定到底有哪个server块来处理这个请求。(当然有时也可能一个Host与多个server块中的server_name都匹配,这时会根据匹配的优先级选择实际处理的server块,优先级这里就不再细说。)

2.此时我们可以看出HTTP请求匹配到了截图中的server_name,这样接下来nginx就会根据header中的Request URI字段进行与location匹配,如上面配置文件的截图所示,匹配到了 location /   。

3.接下来继续由nginx处理可以看到 proxy _pass  http://rocdn ;  这就是进行反向代理处理,这个例子中使用的是nginx的upstream模块进行反向代理实现。

4.通过proxy _pass  http://rocdn ; 中的 rocdn 可以找到对应的upstream块,然后,可以根据其中的server 115.239.210.27:80;再次进行代理请求,

此时发送的GET包内容:Host字段 and Request URI字段 都和上面一样,

5.当代理HTTP请求到达 百度的服务器:115.239.210.27后,若百度也是nginx,则服务器会对其进行类似上面的nginx处理HTTP请求一样,进行server_name 和 location匹配,并将相应的请求资源返回代理服务器。

6.Nginx反向代理服务器接收到百度服务器的返回资源后,再将其返回给客户端浏览器。

以上是关于nginx用户请求反向代理流程的主要内容,如果未能解决你的问题,请参考以下文章

谁能解释一下nginx反向代理是啥意思?

10. Nginx实现反向代理

WebNginx 反向代理与负载均衡

nginx正向代理和反向代理区别和好处

WEB请求处理:Nginx请求反向代理

nginx反向代理