Nginx配置 转发URL中包含特殊字符

这篇具有很好参考价值的文章主要介绍了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文章来源地址https://www.toymoban.com/news/detail-448892.html

到了这里,关于Nginx配置 转发URL中包含特殊字符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包