设置nginx以提供静态文件(如果存在),或者让服务器创建它(如果不存在)

时间:2016-09-12 10:39:44

标签: node.js nginx amazon-s3

Pre NGINX

在我的网站中,我设置了图片,您可以申请自定义尺寸。

file.jpg?s=wXh //w and h are numbers in pixels

如果file.jpg的大小为wXh,我会从S3提供服务​​。

如果file.jpd不存在该大小。我以正确的大小创建它,将其流式传输到客户端,然后将其保存到S3,以便下次存在。

现在这是NGINX的一个相当复杂的情况我猜。

如果文件存在,如何告诉nginx从S3提供服务​​,或者如果文件不存在,请将请求转发给我的节点服务器?

由于

更新

尝试使用@Alexey Ten建议的方法,这似乎很有希望,我相信这是正确的方法,但我仍然遇到麻烦。

这是我在conf文件中使用的代码:

   # domain.com/pubstore is where we have node route to s3
   # the format of the string we use is the path on the s3 server.
   # domain.com/pubstore/folder1/folder2/file.ext will tell node to 
   # fetch the file from [bucket]/folder1/folder2/file.ext
   # location /pubstore/ {
   # proxy_pass http://bucketName.s3.amazonaws.com/;
   # proxy_intercept_errors on;
   # error_page 404 = @nodejs;
   # }


   # location @nodejs {
   # proxy_pass http://localhost:8080/pubstore/;
   #    proxy_http_version 1.1;
   #    proxy_set_header Upgrade $http_upgrade;
   #    proxy_set_header Connection 'upgrade';
   #    proxy_set_header Host $host;
   #    proxy_cache_bypass $http_upgrade;
   #    gzip_disable msie6;
   #    gzip on;
   #    gzip_vary on;
   #    gzip_types image/svg+xml image/x-icon;
   #    gzip_min_length 256;
   # }

当我尝试执行nginx时出现此错误:

 Starting nginx: nginx: 
 [emerg] "proxy_pass" cannot have URI part in location given by 
 regular expression, or inside named location, or inside "if" statement,
 or inside "limit_except" block 

纠正这个的想法?

1 个答案:

答案 0 :(得分:3)

您应该将请求传递给S3,如果它返回404错误,您应该将其重新发送到节点。像这样:

document.addEventListener('deviceready', function() {
    var body = document.querySelector('body');
    angular.bootstrap(body, ['lmp']);
}, false);