【问题标题】:Nginx pass upstream headers to the remote requestNginx 将上游标头传递给远程请求
【发布时间】:2014-09-18 06:03:20
【问题描述】:

这个问题类似于this one,但在aws s3 资源上执行x-accel-redirect。前者试图将上游标头设置为本地请求。这工作正常。但是现在我已经将我的内容移动到了 amazon s3 并且我想对 s3 对象实现相同的受限下载。

这是我的 nginx 配置

proxy_pass_header X-Accel-Redirect;
passenger_pass_header X-Accel-Redirect;

location ~* ^/download_zip/(.*) {
    internal;
    resolver 8.8.8.8 valid=300s;



    proxy_buffering off;
    proxy_set_header Content-Length ""; 
    proxy_set_header Cookie ""; 

    proxy_hide_header x-amz-request-id;
    proxy_hide_header x-amz-meta-uid;
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-meta-mode;
    proxy_hide_header x-amz-meta-mtime;
    proxy_hide_header x-amz-meta-gid;
    proxy_hide_header x-amz-version-id;
    proxy_hide_header accept-ranges;

    # Do not touch local disks when proxying
    # content to clients
    proxy_method GET;
    proxy_pass_request_body off;
    proxy_max_temp_file_size 0;

    proxy_pass_header Content-MD5;
    add_header Content-MD5 $upstream_http_content_md5; 

   #  proxy_set_header Content-MD5 "123123123123123";


     proxy_pass https://a_b_c_assets.s3-east.amazonaws.com/$1$is_args$args; 


     }

导轨部分是

headers['X-Accel-Redirect'] = '/download_zip/uploads/' + params[:story_id] +'/' +    params[:story_id] + '.zip?' + secure_part
headers['X-Accel-Expires'] = 'max'
headers['Content-MD5'] = checksum

除了Content-MD5 没有传递给代理请求外,一切正常。

非常感谢任何帮助。

另一个similar question在这里

【问题讨论】:

  • 这里的上游标头来自亚马逊。您可以使用中间位置来存储第一个上游标头
  • 嗨@Alexey,对,我怀疑。您能否详细说明中间位置。

标签: ruby-on-rails nginx amazon-s3 proxypass x-accel-redirect


【解决方案1】:
proxy_pass_header X-Accel-Redirect;
passenger_pass_header X-Accel-Redirect;

# this is intermediate location that stores header
# to variable and rewrites to another location
location ^~ /download_zip/ {
    internal;
    set $Content_MD5 $upstream_http_content_md5;
    rewrite ^/(.+) /amazon_$1;
}

location ^~ /amazon_download_zip/ {
    internal;
    resolver 8.8.8.8 valid=300s;

    proxy_buffering off;
    proxy_set_header Content-Length ""; 
    proxy_set_header Cookie ""; 

    proxy_hide_header x-amz-request-id;
    proxy_hide_header x-amz-meta-uid;
    proxy_hide_header x-amz-id-2;
    proxy_hide_header x-amz-meta-mode;
    proxy_hide_header x-amz-meta-mtime;
    proxy_hide_header x-amz-meta-gid;
    proxy_hide_header x-amz-version-id;
    proxy_hide_header accept-ranges;

    # Do not touch local disks when proxying
    # content to clients
    proxy_method GET;
    proxy_pass_request_body off;
    proxy_max_temp_file_size 0;

    proxy_pass_header Content-MD5;
    add_header Content-MD5 $Content_MD5; 

    proxy_pass https://a_b_c_assets.s3-east.amazonaws.com/;
}

【讨论】:

  • 用户可以解释从 OP 代码到他/她的代码发生了什么变化
猜你喜欢
  • 2019-07-24
  • 2016-04-21
  • 2013-11-23
  • 2017-11-16
  • 2015-06-09
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多