我应该如何配置Nginx以代理通过参数传递的URL?

我应该如何配置Nginx以代理通过参数传递的URL?,nginx,proxy,oauth-2.0,Nginx,Proxy,Oauth 2.0,我正在尝试访问OAuth2身份验证后的媒体文件(图像、视频) 为了访问资源,我需要向请求中添加一个自定义授权承载令牌,因此我不能使用简单的重写(至少据我所知) 它不能通过普通HTML(比如img或video标记)完成,因此我正在考虑让Nginx将查询代理到最终服务器 每个媒体资源将通过/proxy路径加载,带有令牌参数(用于身份验证)和url,用于实际加载的资源 示例URL: http://myserver.com/proxy/?token=12345&url=http://protec

我正在尝试访问OAuth2身份验证后的媒体文件(图像、视频)

为了访问资源,我需要向请求中添加一个自定义授权承载令牌,因此我不能使用简单的重写(至少据我所知)

它不能通过普通HTML(比如
img
video
标记)完成,因此我正在考虑让Nginx将查询代理到最终服务器

每个媒体资源将通过
/proxy
路径加载,带有
令牌
参数(用于身份验证)和
url
,用于实际加载的资源

示例URL:

http://myserver.com/proxy/?token=12345&url=http://protectedserver.com/custompath/asset
这就是我想到的,但我不太确定如何配置
proxy\u pass
指令,因为我需要它专门代理
$url
变量。我不需要代理路径(无论如何都是空的)

注意:这将在一个封闭的环境中运行,只有特定的机器(交互有限的信息亭)才能访问该页面,因此我不担心身份验证令牌的潜在泄漏

我注意到ServerFault上有一个类似的问题,但没有人回答:


我正在寻找一个配置设置,使其工作或可行的替代解决方案。

以下是针对我的问题的正确配置:

location /proxy/ {
  if ($arg_token ~ "^$") { return 404; }
  if ($arg_url ~ "^$") { return 404; }

  set $url $arg_url;
  set $token $arg_token;
  set $args "";

  # IMPORTANT, this is required when using dynamic proxy pass
  # You can alternatively use any DNS resolver under your control
  resolver 8.8.8.8;

  proxy_pass $url;
  proxy_set_header Authorization "Bearer $token";
  proxy_redirect off;
}

以下是针对我的问题的正确配置:

location /proxy/ {
  if ($arg_token ~ "^$") { return 404; }
  if ($arg_url ~ "^$") { return 404; }

  set $url $arg_url;
  set $token $arg_token;
  set $args "";

  # IMPORTANT, this is required when using dynamic proxy pass
  # You can alternatively use any DNS resolver under your control
  resolver 8.8.8.8;

  proxy_pass $url;
  proxy_set_header Authorization "Bearer $token";
  proxy_redirect off;
}