You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX带$符号URL的请求转发配置问题求助

NGINX 路径转发配置解决方案

问题分析

你的配置存在两个核心问题:

  1. 正则表达式范围过窄,仅能匹配/$/开头的路径,无法覆盖/$本身的情况;
  2. NGINX 默认拒绝 URI 中包含$字符的请求,直接返回 400 错误。

正确配置示例

server {
    listen 80;
    server_name example.com;

    # 允许 URI 中包含 $ 字符,避免 400 错误请求
    unsafe_uri_chars "$";

    # 匹配所有形如 /$、/$/、/$/a、/$/a/、/$/a/b/ 的请求
    location ~ ^/\$(/.*)?$ {
        proxy_pass http://upstream-server2;
        # 可添加其他代理配置,例如:
        # proxy_set_header Host $host;
        # proxy_set_header X-Real-IP $remote_addr;
    }

    # 其余请求转发至上游服务器1
    location / {
        proxy_pass http://upstream-server1;
        # 可添加其他代理配置
    }
}

配置说明

  • unsafe_uri_chars "$";:解除 NGINX 对 URI 中$字符的限制,避免直接返回 400 错误。
  • 正则表达式^/\$(/.*)?$:
    • ^/\$:匹配路径以/$开头的请求;
    • (/.*)?:允许/$后跟随任意路径(包括空值,即/$本身),完美覆盖你需要的所有路径格式。
  • 匹配优先级:正则匹配的优先级高于前缀匹配(location /),符合条件的请求会优先转发至上游服务器2,其余请求自动走服务器1。

编码 URI 处理

NGINX 在匹配location时会自动解码 URI,因此%24会被解析为$,上述配置无需额外修改即可处理example.com/%24、example.com/%24/a等编码后的请求。

内容的提问来源于stack exchange,提问作者morpheus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:05:26