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中包含特殊字符相关推荐

  1. 关于URL地址中包含特殊字符/和\出现无法访问到服务器的解决办法

    默认情况下Jboss和Tomcat等服务器是拒绝url中带"%2F"或者"%5C"的URL,因为它们经浏览器解析之后就变成了"/"和&quo ...

  2. android处理url中的特殊字符

    java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...

  3. java处理url中的特殊字符%等

    java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...

  4. java 特殊字符过滤器_java处理url中的特殊字符

    java处理url中的特殊字符(如&,%...) URL(Uniform Resoure Locator,统一资源定位器)是Internet中对资源进行统一定位和管理的标志. 一个完整的URL ...

  5. java.net.url 中文乱码_asp.net URL中包含中文参数造成乱码的解决方法

    asp.net URL中包含中文参数造成乱码的解决方法 更新时间:2010年03月08日 21:44:27   作者: 中文乱码一直以来是WEB开发中比较常见的问题之一,对于初学者来说,各种各样的编码 ...

  6. Nginx配置+转发8080端口+页面静态缓存+https配置

    +++ js刷新页面: https://www.jb51.net/article/14397.htm https证书: https://wzfou.com/letsencrypt/ Linux Ngi ...

  7. nginx配置转发时,提示no Route matched with those values

    近期,在使用nginx配置转发链接时,出现提示:no Route matched with those values.服务器这边用的时KONG网关. 问题原因: 配置带kong 服务的转发不能带 ho ...

  8. nginx php配置重写,nginx 配置 php url 重写

    nginx 配置 Https php url 重写server { listen 80; server_name www.goodsunlc.com; rewrite ^(.*) https://$s ...

  9. JS中URL中的特殊字符问题:escape,encodeURI,encodeURIComponent(转)

    在使用url进行参数传递时,经常会传递一些中文名(或含有特殊字符)的参数或URL地址,在后台处理时会发生转换错误.在有些传递页面使用GB2312,而在接收页面使用UTF8,这样接收到的参数就可能会与原 ...

最新文章

  1. 分布式系统设计的概念
  2. tensorflow对应的cudnn、cuda版本
  3. 2010502260926_《avolon》
  4. 探索Julia(part8)--循环语句和条件语句
  5. ug建模文本怎么竖着_UG建模知乎答疑练习小集锦
  6. html中的url、href、src的区别
  7. 【ES11(2020)】全局属性 globalThis
  8. c语言程序可以单独编译,c语言的函数能单独进行编译吗?
  9. sublime html整理阶梯,sublime text 之添加插件 并使用
  10. 如何编辑PDF文件,教你几招轻松搞定
  11. java 需要 不是语句,我应该避免使用Java标签语句吗?
  12. CND的定义,原理和好处和CDN回源
  13. 程序员辛酸泪——当程序员老去,程序员又何去何从
  14. 白盒与黑盒测试什么区分
  15. TCP三次握手常见问题
  16. qq怎么登陆不了微信
  17. Oracle Java SE高级版
  18. aspx网页背景图片设置代码_Vue+CSS3制作双螺旋DNA动画:代码详解和基础知识复习
  19. 在word2010中启用文本朗读功能
  20. 龙脑香凉亭的制作工序

热门文章

  1. html中关于侧边导航栏和导航栏的编写
  2. 51CTO专访人人网黄晶:WEB开发需要随需应变(2)
  3. Gradle build.gradle配置
  4. C语言入门(1)——Hello World
  5. 关于Java位运算里的“按位异或”
  6. 偷偷爆料下 955 不加班公司名单(2023 年最新版!)
  7. Python基础操作_字典的遍历
  8. pageX与offsetX的区别
  9. 获取已安装或未安装的apk签名
  10. Java项目毕业设计:交流互动论坛信息网站(java+springboot+vue+mysql)