qizihappy 2024-08-13 17:51 采纳率: 0%
浏览 15

nginx转发后,URL中的%2F消失

请求url:10.192.1.1:8080/demo/test/%2F%2Fabc.txt
nginx转发目标服务:10.192.1.1:80/test/%2F%2Fabc.txt
nginx配置如下所示:
location ~ /demo/ {
#重写转发
rewrite ^/demo(/:|//)+ $1 permanent;
proxy_pass http://10.192.1.1/;
}
问题:rewrite似乎将请求中的%2F弄丢了,实际转发的地址:http://10.192.1.1/test/a.txt
这个问题如何处理?

  • 写回答

1条回答 默认 最新

  • 肾透侧视攻城狮 2024-08-13 19:29
    关注

    帅哥,望采纳一下,我拿个牌不容易啊

    rewrite 指令中的 $1 可能会在转换时丢失 URL 编码修改 Nginx 配置
    修改 rewrite 规则:

    使用正则表达式确保只去掉 /demo 前缀,而不干扰 URL 编码中的其他部分。
    使用 proxy_pass 时,要注意保留重写后的 URI。中的 %2F。
    配置示例

    
    location /demo/ {
        # 处理 URL 编码
        rewrite ^/demo(/.*)$ $1 break;
        proxy_pass http://10.192.1.1;
    }
    
    

    这里的关键点:

    ^/demo(/.*)$ 匹配 /demo/ 后面的所有内容,并捕获它。
    $1 是捕获组中的内容,即 /test/%2F%2Fabc.txt。
    break 用于停止进一步的重写处理,并将修改后的 URI 传递给 proxy_pass。

    完整配置
    假设你的目标是将所有 /demo/ 开头的请求转发到后端服务器,并保持原始 URL 编码:

    
    
    server {
        listen 8080;
    
        location /demo/ {
            # 重写规则
            rewrite ^/demo(/.*)$ $1 break;
            
            # 转发请求到目标服务
            proxy_pass http://10.192.1.1;
        }
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月13日

悬赏问题

  • ¥15 为什么在iis上部署网站,服务器可以访问,但是本地电脑访问不了
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数
  • ¥15 ADS时域 连续相位观察方法
  • ¥15 Opencv配置出错
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused