首页 > 编程知识 正文

302重定向怎么解决,国内301跳转服务器

时间:2023-05-06 02:40:48 阅读:140876 作者:4246

有一天,公司的服务切换了域名,禁用了http协议,只允许用https协议访问。 此时,在浏览器的地址栏中键入url访问静态资源目录时,出现了一个奇怪的问题,即缺省情况下跳转到了http协议的地址。 网络拓扑结构如下。

如上图所示,客户端的https请求到达API网关,该网关通过http协议将请求转发到静态资源服务器。

浏览器发现客户端发送的https请求收到了301状态码的响应,并发现响应标头中的位置字段是要跳转到的http协议的地址。

1 .原因分析为什么服务端会回到301呢? 首先需要弄清楚状态代码的意思。 以HTTP协议3xx开头的状态响应代码是表示重定向的响应。 根据RFC的定义:

301移动个人

302基金

303 See Other

307模板重定向

301是永久重定向。 将Nginx用作HTTP服务器时,如果用户输入不存在的地址,则基本上可能会返回1.404的状态代码,也可能会返回2.301的状态代码和重定向地址。 404 Not Found不作讨论,只说301 Moved Permanently的处理过程。

首先需要明确的问题是,301重定向在什么情况下会触发呢?

答案是Nginx负责设置301 Moved Permanently状态码。但nginx.conf控制Nginx如何处理301 Moved Permanently状态码! 换句话说,要不要进行页面重定向,和怎么重定向,完全是用户配置的结果!Nginx只能在一种情况下将301 Moved Permanently状态代码设置为活动状态。 当用户在浏览器中输入url地址时,末尾部分在文件目录中不是斜线,而是“末尾”/“例如,“www.test.com/indd DOM”nginx找不到名为索引的文件因此,这次访问的返回状态代码被设定为301 Moved Permanently。

浏览器和Nginx的通信流程如下。

一般来说,在nginx.conf中设置absolute_redirect、server_name_in_redirect和port_in_redirect以达到个性化重定向功能其中absolute_redirect控制Location url的生成方式。

如果将absolute_redirect设置为on,则会将绝对路径生成为Location url。 如果将absolute_redirect设置为off,则相对路径将作为Location url生成。 其他两个配置仅在absolute_redirect设置为on时有效。

如果server_name_in_redirect为on,则使用Nginx配置文件server_name作为Location url的主机,否则,使用用户请求url的主机名作为主机如果port_in_redirect设置为on,则使用nginx监听的端口构建Location url。 否则,不设置端口。 因此,上述三个配置项控制Location url的结果,例如“location 3360http://server _ name : port/index /”。 这三种配置的默认值为absolute_redirect=on,server_name_in_redirect=off,port_in_redirect=on。 因此,默认的位置URL为“www.test.com/index/”。

回到第一个问题,我们可以看到https访问跳转到http的原因。 由于静态资源服务器Nginx的状态代码设置为301,并且正在接收80个端口并使用http协议,因此假设浏览器要访问“www.test.com/index”,则默认设置为index”。浏览器接收到301状态码的响应时,会分析响应标头的位置值并跳转。 过程如下图所示。

2 .解决方案的最简单解决方案是将absolute_redirect设置为off,然后将相对路径构建为Location url。 例如以下所示。

服务器{ listen 80; #相对url重定向设置absolute_redirect off; server_name localhost; charset utf-8; access_log logs/access.log main; error_log logs/error.log; large _ client _ header _ buffers 416 k; client_max_body_size 300m; client_body_buffer_size 128k; location/{ index index.html; root /var/www/index/}以这种方式复制代码时,对于' www.test.com/index '的请求,Location响应标头的值等于/index/。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。