架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 457|回复: 1

阿里云负载均衡slb之http重定向https的坑

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-20 10:43:29
zu
先普及一下状态码301和302的区别

301 Moved Permanently 被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。

302 Found 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
301适合永久重定向

301比较常用的场景是使用域名跳转。
比如,我们访问 http://www.baidu.com 会跳转到 https://www.baidu.com,发送请求之后,就会返回301状态码,然后返回一个location,提示新的地址,浏览器就会拿着这个新的地址去访问。
注意: 301请求是可以缓存的, 即通过看status code,可以发现后面写着from cache。
或者你把你的网页的名称从php修改为了html,这个过程中,也会发生永久重定向。

302用来做临时跳转

比如未登陆的用户访问用户中心重定向到登录页面。
访问404页面会重新定向到首页。



阿里云负载均衡slb配置如下:



我们使用http重定向到https,明显的意图是永久重定向,并不是临时重定向,这里阿里云却给我我们返回的是临时重定向302状态码。如下图:



用站长之家和爱站网在线测试的返回状态码都是302,我自己用代码测试的也是返回302状态码。

案例分析: 网站302重定向使用不当导致被GOOGLE惩罚

Business.com是网上最大的商业搜索引擎和分类目录,以专业提供商业信息而享负盛名,包括近19万网页。若以“business”为关键词在Google中进行搜索,该网站名列第一。不过在2010年9月5日,Business.com遇到一件蹊跷之事:它的首页PR由8变成了0, 而且Google搜索结果中找不到该首页。好在被“蒸发”的只是首页。不过庆幸的是第二天首页又回到了Google的搜索结果中,但PR仍旧为0。

链接:https://blog.csdn.net/itmop/article/details/83714957

我是今天在百度站长平台“HTTPS认证”,发现一个站点https验证失败了,引起了我的警觉,以前好好的,为什么突然失败了。

无论是302还是301在功能上面并没有任何区别,但是对于seo应该还有有非常大的影响的,要不咋分成了两个不同的状态码。

由于本站使用的是智能DNS解析,可以设置不同地区解析的地址不一样,本站只区别了国内和国外,国内走阿里云,国外走亚马逊AWS,如下图:



用站长之家ping测试,发现有29个独立ip,虽然解析地址都不一样,但是都是会把网址http重定向到https。

我用代码测试了一下阿里云slb和亚马逊cdn,http重定向https返回的结果,如下图:



请求唯一的不同,就是在测试亚马逊的时候,要通过代理去请求,这样才能走国外解析,附上代码:

  1. class Program
  2.     {
  3.         private const string URL_TEST = "http://www.itsvse.com";
  4.         private const string USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
  5.         static void Main(string[] args)
  6.         {
  7.             Console.WriteLine("----------------------------------------------");
  8.             Console.WriteLine("由于域名使用了智能dns解析,国内国外解析的地址都是不一样的");
  9.             Console.WriteLine("国内阿里云和国外AWS,都使用了http重定向https功能");
  10.             Console.WriteLine("----------------------------------------------");
  11.             Console.WriteLine("----------国内阿里云负载均衡 SLB测试----------");
  12.             HttpHelper httpHelper = new HttpHelper();
  13.             HttpItem item = new HttpItem()
  14.             {
  15.                 URL = URL_TEST,
  16.                 Method = "get",
  17.                 UserAgent = USER_AGENT,
  18.                 Allowautoredirect = false,
  19.             };
  20.             var result = httpHelper.GetHtml(item);
  21.             Console.WriteLine(result.StatusCode);
  22.             Console.WriteLine((int)result.StatusCode);
  23.             Console.WriteLine(result.Html);
  24.             Console.WriteLine("----------国外亚马逊AWS CDN测试----------");
  25.             HttpHelper httpHelperAws = new HttpHelper();
  26.             HttpItem itemAws = new HttpItem()
  27.             {
  28.                 URL = URL_TEST,
  29.                 Method = "get",
  30.                 UserAgent = USER_AGENT,
  31.                 Allowautoredirect = false,
  32.                 ProxyIp = "127.0.0.1:1020",
  33.                 ProxyUserName = "a",
  34.                 ProxyPwd = "a"
  35.             };
  36.             var resultAws = httpHelperAws.GetHtml(itemAws);
  37.             Console.WriteLine(resultAws.StatusCode);
  38.             Console.WriteLine((int)resultAws.StatusCode);
  39.             Console.WriteLine(resultAws.Html);
  40.             Console.ReadKey();
  41.         }

  42.     }
复制代码
在测试之前,已经给阿里云提交工单,如下图:



截至此时,并没有解决,也没有说明原因。

(完)




上一篇:history.pushState 实现浏览器页面不刷新修改url链接
下一篇:Add-Migration : 无法将参数绑定到参数“Path”,因为该参数是..
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
沙发
 楼主| 发表于 2019-6-21 10:19:32
工程师 96514 号 :    您好,抱歉,让您久等了。SLB产品的设计默认就是使用302,无法变更。您可以在SLB上取消端口重定向,而改为在后端Web服务器中设置HTTP重定向至HTTPS,这样您可以自定义状态码。  



这次对阿里云挺失望的,阿里云官网自己用的301状态码,却给客户用302状态码,也没有说明为什么要用302状态码。

对于网站的seo来说,感觉应该会有影响。

胳膊拧不过大腿,咱还是自己配置吧。毕竟也就是几分钟的事,咱一开始并不是因为懒的配置去提问的,只是想一探究竟。

HTTP 流量重定向到 HTTPS 配置教程
https://www.itsvse.com/thread-7727-1-1.html
(出处: 架构师_程序员)

设置SLB的http的80端口,转发到后端的8088端口(后端随便设置即可),配置如下:

  1. server {
  2.         listen 8088;
  3.         server_name localhost;
  4.         location / {
  5.                 return 404;
  6.         }
  7. }

  8. server {
  9.         listen 8088;
  10.         server_name itsvse.com www.itsvse.com;
  11.         return 301 https://$host$request_uri;
  12. }
复制代码
记得健康检查,勾选40x状态码

后端重启nginx服务即可。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-9-18 16:51

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表