Nginx配置 转发URL中包含特殊字符
Nginx经常被用来作为代理服务器,可以有效的避免跨域问题。
老项目需要对接一个新的服务,但是存在跨域问题,然后就配置了一个代理
可是突然在某天,新接口出现了异常。接口报了400错误。
# 转发
location /test {.......其他配置信息.......proxy_pass http://127.0.0.1:8080/;}
然后定位发现新接口url比较特殊还不能修改,在其他的地方也用了,整个URL中包含了特殊字符,nginx接收之后会解码但是转发出去不会对其进行编码,导致对方访问无法解析而报错。
例如这样的url
services/lists/aa/bb/~~/resource-lists/list%5B@id=%221%22%5D?&t=1669973282354
nginx 进行转发时,url存在特殊字符会导致请求报400错误。
一般正常的处理方式都是直接进行正则匹配,使用 $1 直接获取匹配到的URL,不做任何处理,直接拼接在后面,这样可以避免报错。
# 转发
location /test {if ($request_uri ~* ^/(.*)$) {proxy_pass http://127.0.0.1:8080/$1;}}
#不对url进行处理
最终在此基础上采用了正则进行了url匹配截取了部分url拼接,解决转发400错误。
url截取
正则匹配来获取截取
# 转发
location /test {if ($request_uri ~ /test/(.*)$ ){proxy_pass http://127.0.0.1:8080/$1;
}
$1就是test/后的所有url参数。
以上只是举例
正常只需要去掉匹配路径,在完整转发即可。
正常转发情况
1、去掉匹配路径转发
转发示例:
请求:http://somedomain.com/test/path/request
转发:http://otherdomain.com/path/request
location ^~ /test/ {
proxy_pass http://otherdomain.com; }
2、完整路径转发
转发示例
请求:http://somedomain.com/test/path/request
转发:http://otherdomain.com/test/path/request
location ^~ /test {
proxy_pass http://otherdomain.com; }
调试小技巧
如何查看nginx 的 $1,$2,$3
匹配正则表达式时,匹配到的值通过$1、$2、$3、…、$9使用。一个()就是一个
location ~* /test/(.*) {return 200 "hello, $1";}location ~* /test1/(.*)/(.*) {return 200 "var1 = $1, var2 = $2";}
直接返回匹配到的值,打印到接口或者界面中。用来调试最终转发的url
Nginx配置 转发URL中包含特殊字符相关推荐
- 关于URL地址中包含特殊字符/和\出现无法访问到服务器的解决办法
默认情况下Jboss和Tomcat等服务器是拒绝url中带"%2F"或者"%5C"的URL,因为它们经浏览器解析之后就变成了"/"和&quo ...
- android处理url中的特殊字符
java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...
- java处理url中的特殊字符%等
java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...
- java 特殊字符过滤器_java处理url中的特殊字符
java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...
- java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法
asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27 作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...
- Nginx配置+转发8080端口+页面静态缓存+https配置
+++ js刷新页面: https://www.jb51.net/article/14397.htm https证书: https://wzfou.com/letsencrypt/ Linux Ngi ...
- nginx配置转发时,提示no Route matched with those values
近期,在使用nginx配置转发链接时,出现提示:no Route matched with those values.服务器这边用的时KONG网关. 问题原因: 配置带kong 服务的转发不能带 ho ...
- nginx php配置重写,nginx 配置 php url 重写
nginx 配置 Https php url 重写server { listen 80; server_name www.goodsunlc.com; rewrite ^(.*) https://$s ...
- JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent(转)
在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误.在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原 ...
最新文章
- 分布式系统设计的概念
- tensorflow对应的cudnn、cuda版本
- 2010502260926_《avolon》
- 探索Julia(part8)--循环语句和条件语句
- ug建模文本怎么竖着_UG建模知乎答疑练习小集锦
- html中的url、href、src的区别
- 【ES11(2020)】全局属性 globalThis
- c语言程序可以单独编译,c语言的函数能单独进行编译吗?
- sublime html整理阶梯,sublime text 之添加插件 并使用
- 如何编辑PDF文件,教你几招轻松搞定
- java 需要 不是语句,我应该避免使用Java标签语句吗?
- CND的定义,原理和好处和CDN回源
- 程序员辛酸泪——当程序员老去,程序员又何去何从
- 白盒与黑盒测试什么区分
- TCP三次握手常见问题
- qq怎么登陆不了微信
- Oracle Java SE高级版
- aspx网页背景图片设置代码_Vue+CSS3制作双螺旋DNA动画:代码详解和基础知识复习
- 在word2010中启用文本朗读功能
- 龙脑香凉亭的制作工序
热门文章
- html中关于侧边导航栏和导航栏的编写
- 51CTO专访人人网黄晶:WEB开发需要随需应变(2)
- Gradle build.gradle配置
- C语言入门(1)——Hello World
- 关于Java位运算里的“按位异或”
- 偷偷爆料下 955 不加班公司名单(2023 年最新版!)
- Python基础操作_字典的遍历
- pageX与offsetX的区别
- 获取已安装或未安装的apk签名
- Java项目毕业设计:交流互动论坛信息网站(java+springboot+vue+mysql)