网站首页 > 技术教程 正文
前言
今天遇到了一个比较有意思的涉及 nginx 的小问题,这里在测试环境模拟记录一下;
问题现象
客户端访问7层 规则,request url 类似为:http://www.test.com/test?xxx=aaa ; 请求需要重定向到HTTPS ,实际重定向后的请求变成了 https://www.test.com/?xxx=aaa ;url 中的path 丢失了,导致后面业务逻辑报错;
报错现象如下图:
问题分析与处理
业务这里配置重定向的预期是将http 请求 重定向到 https ,保证业务请求的安全性;即正常经过重定向请求的url 应该是 https://www.test.com/test?xxx=aaa ; 但是这里的path 在转发过程中丢失了;
检查nginx 配置文件中,rewrite 相关类似配置如下:
location /test {
rewrite ^/(.*) http://www.testnginx.com:9090/ permanent;
}
发现这里是将所有匹配location 为 /test 的path ,都直接重定向到‘/’ ;导致请求中所带的path 被完全丢弃;
如果需要带原来的url 的正确配置应该如下:
location /test {
rewrite ^/(.*)$ http://www.testnginx.com:9090/$1 permanent;
}
可见,正则后面的目的地址,需要配置变量,将原来的url 统一替换;这样请求就不会出现类似的问题了;
修改后,访问效果见下图:
相关知识记录
这个小问题中涉及到几个知识点简单记录一下;
curl 命令 -v 选项,显示详细请求信息,很常用,可以看出具体请求域名对应的ip和port,以及是否tcp 握手成功,是否已经发出http 请求,以及http 请求类型等;
curl 命令 -L 选项,遇到重定向的请求,继续将重定向的后的url 进行请求,如果不加-L 的话,遇到重定向的请求,就只会看到 301/302 的重定向状态码;
rewrite是 ngx_ http_ rewrite_ module模块下的指令,使用频率非常高。
rewrite支持的配置环境有 server、 location、 if,它通过 break和 last来完成内部重定向功能。内部重定向是在 Nginx内部发送请求的操作,它可以将请求转发到其他的 location或对 URL进行修改,而不必通过 HTTP连接请求,整个操作非常高效。
永久重定向和临时重定向的区分是为爬取搜索引擎而设置的。如果状态码是 301,表示网页地址永久改变,搜索引擎会将旧页面的地址替换成新页面的地址,用户在搜索引擎搜索网站时,就不会再去旧地址了。
如果状态码是 302,表示临时重定向,搜索引擎会保留旧页面的地址,因为它认为跳转只是暂时的。当用户使用搜索引擎搜索网站时,会首先进入旧地址然后再被跳转到 302指定的新地址。
301和 302的跳转并不适合用于 POST请求,如果 POST请求被跳转的话,会先被转化为 GET请求,且请求体的内容会丢失,为此 HTTP 1. 1提供了新的跳转状态码 307和 308。
状态码 307的意义和 302一样,都是临时重定向;而 308和 301一样,都是永久重定向。但如果要求在跳转过程中保持客户端的请求方法不变,需要使用 return指令
猜你喜欢
- 2024-09-09 「Nginx」Web/代理服务器的瑞士军刀:重写与定位
- 2024-09-09 ingress-nginx常用注解指南(nginx详细讲解)
- 2024-09-09 Nginx反向代理常用配置(nginx反向代理设置)
- 2024-09-09 nginx+springboot使用https重定向的解决办法
- 2024-09-09 Nginx从0基础到进阶实战!运维工程师必看
- 2024-09-09 深度|掌握Nginx监控运维,这一篇足矣!
- 2024-09-09 详解nginx配置location总结及rewrite规则写法
- 2024-09-09 nginx 使用技巧配置(nginx 配置详解)
- 2024-09-09 nginx之Rewrite实战(nginx rewrite_by_lua)
- 2024-09-09 详解 Nginx配置静态内容服务器|附案例说明
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)