Articles of 亚马逊 S3

Carrierwave +雾+ aws s3和轨道在生产

我刚刚从paperclip迁移到carrierwave,并成功地上传到S3在我的机器上本地工作,但在将Rails应用程序部署到我的服务器(使用Ubuntu,Passenger with nginx,是一个让它工作的任务)之后,当我尝试上传一个图像,它试图将其保存到公共/上传/ …出现了一个权限被拒绝的错误,我到处寻找和search,找出为什么它不工作,什么都没有find。 我的上传器文件: class AvatarUploader < CarrierWave::Uploader::Base include CarrierWave::Compatibility::Paperclip storage :fog def store_dir "/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end end fog.rb CarrierWave.configure do |config| config.storage = :fog config.fog_credentials = { provider: 'AWS', # required aws_access_key_id: '*******', # required aws_secret_access_key: '********', # required region: 'ap-southeast-2', # optional, defaults to 'us-east-1' } config.fog_directory = 'publicrant' # required # config.fog_public […]

有没有办法回退nginx的proxy_pass如果头设置

nginx服务器提供http: //server1.com,http://server2.com和http://server3.com 。 nginx上游请求进程到一些ruby代码。 server1.com,server2.com和server3.com实际上是一些存储在亚马逊S3上的静态文件。 我想做下一步:find'服务器1'主机的桶名称,把数据库中的一些日志,并通知nginx从亚马逊stream。 也许通过设置在Ruby的代码标题与url亚马逊S3桶和以后使用此url的Nginx。 stream程:浏览器 – > nginx – > ruby​​ – > nginx – > amazon_s3 – >浏览器 我发现我可以做这个错误: http { server { listen 12345; #Port that my custom app was assigned server_name mydomain.com; location / { proxy_intercept_errors on; error_page 400 403 502 503 504 = @fallback; proxy_pass http://the_old_site_domain.com; } location […]

生产中的图像上传失败

我使用Nginx + Passenger的数字海洋液滴作为服务器。 我们在Rails中使用CarrierWave gem上传图像和resize/处理并将其上传到Amazon S3。 它在本地环境中工作得很好,但是当我将其部署到生产中时,图像上传不起作用。 错误: 我们很抱歉,但是出现了一些问题。 该应用程序在80端口运行 不知道在哪里看甚至debugging问题。 乘客日志也不会显示任何错误。

configurationnginx服务器来处理来自多个域的请求

使用案例: –我正在开发一个Web应用程序,它允许创buildHTML模板并在亚马逊S3上发布它们。现在将我使用nginx作为代理服务器的网站发布出去。 代理服务器的function是,当用户input网站URL时,我想确定如何检查请求是否来自我的应用程序, 例如app.mysite.com (这不会改变),并将其路由到apache以进行常规访问,如果它来自一些其他的域像一个普通的URL www.mysite.com(这需要dynamic处理,可以随机),它将转到承载模板的S3存储桶。 我目前的configuration是: user nginx; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr – $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; charset utf-8; keepalive_timeout 65; server_tokens off; sendfile on; tcp_nopush on; tcp_nodelay off; […]

Nginx的image_filter

我在S3上存储静态,并使用nginx作为前端。 从S3中获取我使用这种结构: location / { try_files $uri @s3; } location @s3 { root /var/www/static.dev; proxy_pass https://bucket.s3-eu-west-1.amazonaws.com; proxy_store off; # for test purposes proxy_store_access all:rw; proxy_temp_path /dev/shm; } 这工作! 但我想生成大拇指,并使用此位置: if ( $uri ~ ^/t/ ) { set $w 182; set $h 114; } if ( $uri ~ ^/m/ ) { set $w 640; set $h […]

Heroku上传和脚本执行限制

我在Heroku的NGINX(定制buildpack)上使用PHP 5.4.12。 上传1.5MB或更大尺寸的图片时,我遇到了问题。 这就是我正在做的事情: PHP上传到Heroku(使用iFrames和Ajax) 在Heroku上裁剪,resize和遮罩照片(使用Imagick命令行, convert和composite ) 将编辑的图像移动到另一个服务器(因为Heroku不会让你长期存储的东西,除非他们被推到服务器)。 现在我正在使用我的testing环境/服务器,但我相信我最终会将其移到S3上。 任何小文件都可以通过。 任何比几个megs更大的东西只会在上传时间(看起来像)上挂起。 相同的确切脚本在另一台服务器上工作得很好。 我在Heroku上通过php.ini文件修改,重新编译了slu,,重新启动并重置了dynos。 phpinfo()调用显示增加的上传限制,但脚本仍然以相同的方式失败。 我知道Heroku应该有一个30秒的脚本执行限制,但是,我看到它的方式,PHP上传发生在脚本开始执行之前。 我原本是试图从不同的服务器执行上传脚本,但是,因为我正在向上传脚本发出Ajax请求,所以我遇到了CORS(跨源资源共享)限制,而且我不喜欢CORS解决方法有些浏览器不服从。 任何想法,我可以允许用户上传大于1.5MB的图像,在图像上运行我的裁剪/屏蔽脚本,然后在某处存储图像(例如Amazon S3)? 也许有人知道一种方法直接上传到亚马逊,编辑EC2上的图像,然后转移到S3? 谢谢! PS,寻找一个无闪存解决scheme,因为我试图成为移动友好。

Django-Filebrowser(Mezzanine)无法在nginx生产服务器上加载大型Amazon S3目录

我有Django-Filebrowser的一些问题,从我可以告诉他们似乎与Nginx有关。 我遇到的主要问题是Django-Filebrowser无法加载夹层pipe理员中具有大量Amazon S3文件的目录。 我有多个目录,有400多个大型audio文件(每个数百MB)托pipe在S3上,当我尝试加载夹层pipe理/媒体库时,我的服务器返回一个nginx 500(坏的网关)错误。 我没有任何问题,直到目录开始变大。 这可能值得注意几件事情: 这个项目build立在使用修改的django-filebrowser包的Mezzanine CMS上 我只使用Amazon S3为项目提供媒体文件,所有静态文件都通过nginx在本地提供。 所有的django-filebrowserfunction都能在实际加载的目录中正常工作。 我创build了一个1000个小文件和Django的文件浏览器加载正确的testing目录。 在下面列出的nginx.conf设置(代理缓冲区大小,proxy_connect_timeout等),我已经testing了多个值,多次,我永远不能让页面一贯加载。 我已经尝试添加额外的位置在我的nginx conf中“admin / media-library /”增加了超时,以及其他设置,我尝试过…但它仍然没有正确加载这些大目录。 我相信我的主要问题,大型S3目录不加载pipe理,是一个nginx问题,因为我没有麻烦加载这些目录在没有nginx的本地环境。 我的nginx错误日志会引发以下错误: 2014/11/24 15:53:25 [error] 30816#0: *1 upstream prematurely closed connection while reading response header from upstream, client: xx.xxx.xxx.xxx, server: server, request: "GET /admin/media-library/browse/ HTTP/1.1", upstream: "http://127.0.0.1:8001/admin/media-library/browse/", host: "server name, referrer: "https://example/admin/" 我研究了这个错误,导致我将这些行添加到我的nginx conf文件中。 proxy_buffer_size 128k; […]

带有s3存储区的nginx try_files和没有扩展名的html页面的proxy_pass

我有一个包含目录和html文件的s3存储桶。 我在桶前使用nginx,并configuration了一个proxy_pass到桶,这工作正常。 我想干净的url没有HTML扩展名,并为这些url来正确parsing。 例如,而不是foo.com/bar/my-file-name.html ,这可以通过foo.com/bar/my-file-name访问 这里的主要问题是如何防止在每个URL的末尾需要.html。 如在,我想nginx处理每个请求的路由,并尝试寻找一个.html扩展名的文件,然后返回它。 我的问题是,我不知道如何强制nginx try_files像我在非S3网站。 当我尝试添加try_files任何configuration时,它会通过在所有path上返回HTTP 500错误来中断站点。 为了便于比较,下面是在非S3支持的站点(服务器上的文件)上的configuration: location / { try_files $uri $uri/ @htmlext; } location @htmlext { rewrite ^(.*)$ $1.html last; } 我的目标是将这种行为与proxy_pass一起复制到S3存储桶中,并强制它尝试扩展名为.html而不是index.html文件名。 这是我目前的configuration,很好,减去除index.html以外的任何html文件: location / { proxy_pass my-bucket.s3.blahblah/; }

使用S3作为nginx的后备,在第一次“less量”加载时失败

我在多服务器设置(EC2)上有一个WordPress站点,我将所有的图片上传到S3。 我已经设置nginx这种方式redirect图像请求到S3: location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; add_header Cache-Control public; add_header Pragma public; error_page 404 = @s3blog; } location @s3blog { proxy_buffering on; proxy_intercept_errors on; proxy_hide_header x-amz-id-2; proxy_hide_header x-amz-request-id; resolver 8.8.8.8; proxy_pass $scheme://my-bucket.s3.amazonaws.com; } 这只在第一次加载页面后才起作用。 我经常从博客的负责人那里得到一些投诉,这些投诉是坏的。 当我检查出来它很好,但第一次加载不起作用。 服务器使用fastcgi来location ~ .php$ 。 有什么我做错了吗? 提前致谢

用nginx从S3服务单个文件Angular应用程序

我有一个由单个index.html文件组成的Angular应用程序。 唯一的其他文件是main.css和一些图像资产。 我已经重新发现,没有办法使用S3虚拟主机服务,所以我试图设置Nginx作为代理。 我以前做过这个,但那是几年前的事情,而不是一个Angular应用程序和HTML5推送状态。 这是当前的nginxconfiguration服务器块。 server { server_name foo.com; set $s3_bucket 'foo.com.s3.amazonaws.com'; proxy_http_version 1.1; proxy_set_header Host $s3_bucket; proxy_set_header Authorization ''; proxy_hide_header x-amz-id-2; proxy_hide_header x-amz-request-id; proxy_hide_header Set-Cookie; proxy_ignore_headers "Set-Cookie"; proxy_buffering off; proxy_intercept_errors on; resolver 172.16.0.23 valid=300s; resolver_timeout 10s; location ~* ^/(assets|styles)/(.*) { set $url_full '$1/$2'; proxy_pass http://$s3_bucket/live/$url_full; } location / { rewrite ^ /live/index.html break; proxy_pass […]