重定向后的Nginx反向代理

时间:2014-08-19 21:33:23

标签: nginx amazon-s3 proxy

我希望Nginx返回实际文件,而不是使用Location:重定向标头回复。我使用Nginx作为反向代理缓存:cdn.mydomain.com收到请求并与api.mydomain.com/files/联系以从中获取图片文件,但api.mydomain.com/files/会返回一个空白回复,其中Location:重定向标头为AWS S3,而不是文件本身。

因此,Nginx缓存空白重定向响应。如何让Nginx从S3获取和缓存实际文件。

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

http {
    server_names_hash_bucket_size 64;
    proxy_redirect off;

    proxy_cache_path /var/cache/nginx levels=2:2:2 keys_zone=my-cache:8m max_size=4G inactive=600m;
    proxy_temp_path /var/cache/tmp;

    server {
        listen 80;
        server_name cdn.mydomain.com;
        server_tokens off;
        location / {
            proxy_pass http://api.mydomain.com/files/;

            proxy_cache my-cache;
            proxy_cache_valid 200 302 30d;
            expires 30d;
            add_header Pragma public;
            add_header Cache-Control "public";
        }
}

2 个答案:

答案 0 :(得分:0)

我有同样的需求,我找不到任何可行的解决方案,所以我将从Nginx mailing lists和Nginx文档中学到的东西结合起来:

var x = document.getElementsById(id);
//x[i]
var i;
for (i = 0; i < x.length; i++) {
  var n = i++;
  var converter1 = Markdown.getSanitizingConverter();
  var CODESOFTLAB = new Markdown.Converter(converter1);
  var before = document.getElementById("replybefore"+n).value;
  var MarckDowPreviewHtml = CODESOFTLAB.makeHtml(before);
  document.getElementById("replyJail"+n).innerHTML = MarckDowPreviewHtml;
  var a = 10;
}

P.S。我已经注释掉了与我的用例相关的proxy_cache选项,但您仍然可以发现它们很有用。

答案 1 :(得分:-1)

执行下载文件的所有流量都将通过nginx。

我建议设置单独的DNS记录,例如files.mydomain.com,并将其指向Amazon S3存储桶。这可以从您的域中提供,但所有流量都将通过亚马逊。

Documentation about setting up the DNS