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、完整路径转发
调试小技巧 如何查看nginx 的 $1,$2,$3转发示例
请求:http://somedomain.com/test/path/request
转发:http://otherdomain.com/test/path/request
location ^~ /test {
proxy_pass http://otherdomain.com; }
匹配正则表达式时,匹配到的值通过$1、$2、$3、…、$9使用。一个()就是一个
location ~* /test/(.*) {
return 200 "hello, $1";
}
location ~* /test1/(.*)/(.*) {
return 200 "var1 = $1, var2 = $2";
}
直接返回匹配到的值,打印到接口或者界面中。用来调试最终转发的url
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页标题:Nginx配置转发URL中包含特殊字符-创新互联
标题网址:http://myzitong.com/article/dhejde.html