nginx做反向代理服务器处理redirect响应

今天总结的东西被胡老师看到可能会被骂,因为是以前遇到过的研究过得,但是今天才是真正因为被坑了,才深深理解了以前了解的知识。

情景描述

  • 使用ngixn做反向代理服务器,使用express作为后端服务器
  • nginx的配置如下
    server {
      listen       8089;
      server_name  localhost;
          
      location /test/ {
          proxy_pass         http://localhost:3000/;
    }
    
  • 后端服务器如下:
    app.get('/a', function (req, res) {
      res.send('bbbbbbbb');
    })
    
    app.get('/', function (req, res) {
      res.redirect(301, 'https://www.baidu.com');
    });
    
    
  • 发现当我请求http://localhost:8089/test这时候浏览器跳转到百度
  • 但是当我修改后端服务器之后的跳转地址为http://localhost:3000/a之后,在当前浏览器再请求http://localhost:8089/test永远只能跳转到百度
  • 及时当我点击chrome上的disable cached结果仍然一样。
  • 然后我重新打开一个浏览器发现请求终于不跳转到百度了。
  • 跳转了http://localhost:8089/test/a很恼火,明明我请求的时候待了域http://localhost:3000但是我看到的请求路径变了
  • 而且连301response中的location也变了。

矛盾点

  • 当我修改了后端服务器的301 location的时候发现浏览器竟然还是跳转原来的地址。如果是缓存的原因,我清除缓存的之后就应该能够正常跳转了但是还是跳转到原来的地址
  • 而且我的重定向地址带了域为什么还是变成了nginx的域呢?

301状态码到底有什么样作用,会导致浏览器做什么?

  • 所有的重定向响应都必备两个部分:
    • 第一个:3**状态码
    • 第二个:响应头中的location字段
  • 当浏览器接收到301的响应,浏览器
    • 浏览器首先从response header中取出location字段
    • 然后直接向location的地址发送请求
      (以上两个步骤其实是浏览器在做重定向)
    • 当服务器处理完此次请求之后将response发送回浏览器就相当于此次重定向的response处理完 毕
  • 当你再次发送这个response是301的请求的时候
    • 发回301状态码的服务器再也没有接受过请求。
    • 因此推断,浏览器会记录收到301response的请求url并且将location也存下。
    • 每当你请求这个url,浏览器就会从自己的存储器中拿出location直接跳转。
  • 当你清除浏览器缓存的时候,这种永久重定向是没有办法被清除的。除非你换一个浏览器。至于为什么有没有别的办法这里我还没研究。下回分解吧。

---> 以上三点就解释了为什么当你的服务器修改了301response的location,再次请求url的时候location依旧不变的原因。

302状态码和301状态码有什么区别

  • 之前我曾经梳理过他们的区别,但是现在换一种方式说明。
    • 301:当某个url请求后拿回301,以后不会请求多少次这个url,浏览器都不会把这个url请求发送给服务器。
      • 简单说:返回301的服务器针对同一个浏览器只会处理一次这个请求,以后对这个url的处理都是浏览器自己进行的,不会再发给服务器了。
    • 302:当某个url请求后拿回302。
      • 浏览器不但会在每次请求的时候都做重定向
      • 而且每次都会将这个url的请求发往给后端处理。绝对不会擅自用以前存储的location直接跳转。

为什么使用nginx反向代理之后,我的response的location中的域会被替换?

  • 这里要修改一个本人的认知错误:一直以为nginx做反向代理服务器就是转发请求,但是response ngixn是不会经手直接发给浏览器的。其实这个认知是错误的。nginx作为反向代理服务器,会做五件事:

    • 修改request url
    • 路由request
    • 接收response
    • 替换response的域
    • 返回给浏览器
  • 这就是必须遵循的:请求是谁发的response就会到谁的手上

  • 请求url:http://localhost:8089/test发送到nginx.nginx通过配置知道http://localhost:8089/test代理的是 http://localhost:3000就相当于修改url的时候遵循
    http://localhost:8089/test == http://localhost:3000

    • nginx修改url: http://localhost:3000
    • 发送请求
    • 接受response:发现location是http://localhost:3000/a立刻替换为http://localhost:8089/test/a
    • 返回给浏览器。
  • 这时候就可以解释,不论任何的反向代理服务器,他们都是通过修改request和response的url让浏览器看到永远都只有自己这么一个服务器,所有的请求都是发往反向代理服务器的。

nginx如果可以先接收到3**响应,那么他会直接做重定向吗?

  • 在没有做配置的时候,nginx绝对不会内部做重定向的!nginx会把重定向response送回给浏览器,让浏览器做

反思

  • 理论没有联系实践,知识迁移能力还是有问题

action

  • 以后学习所有概念必须至少列出一个例子。不能干说概念。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,920评论 21 356
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,985评论 0 9
  • 1.ngnix介绍 ngnix www服务软件 俄罗斯人开发 开源 性能很高 本身是一款静态WWW软件 静态小文件...
    逗比punk阅读 2,075评论 1 6
  • 总有滴滴点点是你的回忆 总会念念不忘那个人姓名 别忘记那些曾经 也别把情话说的娓娓动听 此刻的你已经逃离 逃离这颗...
    拾贰记阅读 222评论 0 2