首页 > Web开发 > 详细

nginx是怎么处理http请求的

时间:2019-08-30 17:58:03      阅读:67      评论:0      收藏:0      [点我收藏+]

nginx是怎么处理http请求的

参考:How nginx processes a request

nginx first decides which?server?should process the request. Let’s start with a simple configuration where all three virtual servers listen on port *:80:

nginx首先决定要用配置文件里的哪个server{}块来处理,假设有下面的server{}配置

server {
    listen      80;
    server_name aaa;
    ...
}

server {
    listen      80;
    server_name bbb;
    ...
}

nginx会根据过来的http请求头里的Host字段里的值,来判断使用哪个server{}。

  • 如果请求头里没有Host字段,或者Host字段里的值,和Nginx配置文件里的server{}里的{server_name}都不匹配,则使用第一个server{},来处理这个请求。
  • 如果请求头里的Host字段里的值和Nginx配置文件里的某个server{}里的{server_name},匹配上了,则使用这个server{},来处理这个请求。

可以使用curl工具来方便的做实验,curl可以设置http请求的请求头,所以可以任意设置Host字段,用【-H】来设置。下面的10.210.65.73是安装了nginx的机器的IP地址。

所以用下面的命令,发送了http请求后,nginx就会使用server{server_name aaa}来处理这个请求。

curl.exe -H "Host: aaa" 10.210.65.73

非常重要的结论:server_name对应的是http请求头里的Host字段的值

有了上面的理论支撑,就可以很容易的设置反向代理和负载均衡

  • 当过来的http请求头里的Host字段为aaa时,storage.test来处理。
  • 当过来的http请求头里的Host字段为bbb时,tracker.test来处理。
   #负载均衡配置,IP为129的机器配置高,所以给他的数字的27,就是让它多处理
   upstream storage.test {
     server 10.210.65.129:80 weight=27;
     server 10.210.65.130:80 weight=1;
   }

   #负载均衡配置
   upstream tracker.test {
     server 10.210.65.52:80 weight=7;
     server 10.210.65.53:80 weight=2;
   }

   #文件的存储
   server {
       listen       80;
       server_name  aaa;
       location / {
            #http:://后面的内容是自己定义,对应上面upstream的名字
            proxy_pass  http://storage.test;
       }
   }

   #文件服务器tracker
   server {
       listen       80;
       server_name  bbb;

       location / {
            #http:://后面的内容是自己定义的,对应上面upstream的名字
            proxy_pass http://tracker.test;
       }

   }

c/c++ 学习互助QQ群:877684253

技术分享图片

本人微信:xiaoshitou5854

nginx是怎么处理http请求的

原文:https://www.cnblogs.com/xiaoshiwang/p/11436332.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!