我读到了Nginx Fabric Model,它引起了我的注意力,重新配置应用程序如何与MySQL和Redis进行通信.如果本地Nginx实例可以高效且快速地代理HTTP流量,那么现在它也可以代理TCP而不必担心网络,即使在紧急情况下使用数据库slave作为主服务器并且可能封装数据库分片.所有这些好处都可以简化应用程序配置及其逻辑,网络(拥塞,延迟,超时,重试)将不再是功能开发的重点.
我使用最新的Docker和一组容器:Nginx,Redis,MySQL.我尝试了以下配置:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream redis {
# prefer first server but limit connections
server 172.17.0.8:6379 weight=2 max_conns=1;
server 172.17.0.3:6379;
}
upstream mysql {
# use second server in case of failure
server 172.17.0.4:3306;
server 172.17.0.5:3306 backup;
}
server {
listen 6379 so_keepalive=on;
proxy_pass redis;
}
server {
listen 3306 so_keepalive=on;
proxy_pass mysql;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一些问题: …
我想使用rails-api gem special来创建仅限API的应用程序.为了提供身份验证机制,我想使用Railscasts#352中描述的内置authenticate_or_request_with_http_token方法,但此方法在此处缺失.
有没有人对rails-api gem 有经验?
PS我可以看到这种方法,但是这个生产准备好了吗?
使用multipart/form-data上传文件很简单,大部分时间都可以正常工作,直到您开始专注于大文件上传.如果我们仔细查看文件上传期间发生的情况:
客户端发送带有BODY文件内容的POST请求
webserver接受请求并启动数据传输(如果文件大小超过限制,则返回错误413)
webserver开始填充缓冲区(取决于文件和缓冲区大小),将其存储在磁盘上并通过套接字/网络发送到后端
后端验证身份验证(看一下文件上传后)
后端读取文件并删除少量标题Content-Disposition,Content-Type,将其再次存储在磁盘上后端执行文件所需的全部操作
为了避免这种开销,我们将文件转储到磁盘上(Nginx client_body_in_file_only)并管理回调以便进一步向下发送.然后队列工作者选择文件并执行所需操作.它适用于服务器间通信非常流畅,但我们必须解决客户端上传的类似问题.
我们还有客户端S3上传解决方案.没有后端交互发生.对于视频上传,我们管理视频以转换为带有Zencoder的h.264 Baseline/AAC格式.
目前我们使用基于s3-swf-upload-plugin的改进的Flash上传器与Zencoder JS SDK的组合,该SDK非常高效但使用Flash.
题.如何使用HTML5文件上传器达到相同的目标?Filepicker.io和Zencoder是否解决了这个问题?在没有后端交互的情况下管理HTML5文件上传的推荐方法是什么?
要求如下:
是否https://www.filepicker.com成为一个好工作吗?
我们有一个基于Rails的应用程序,部署基础架构绑定到AWS.当前架构包括以下层:
有3个SPF:负载均衡器,数据库,媒体服务器.
我的问题是关于冗余,我如何减少SPF:
scaling mysql-management high-availability ruby-on-rails amazon-web-services
我不能让Nginx使用memcached模块,要求是查询远程服务,缓存memcached中的数据,永远不要获取远程端点,直到后端使缓存无效.我有2个带有memcached v1.4.35的容器和一个带有Nginx v1.11.10的容器.
配置如下:
upstream http_memcached {
server 172.17.0.6:11211;
server 172.17.0.7:11211;
}
upstream remote {
server api.example.com:443;
keepalive 16;
}
server {
listen 80;
location / {
set $memcached_key "$uri?$args";
memcached_pass http_memcached;
error_page 404 502 504 = @remote;
}
location @remote {
internal;
proxy_pass https://remote;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Run Code Online (Sandbox Code Playgroud)
我试图错误地设置memcached上游,但我得到HTTP 499而不是警告:
*3上游服务器在连接上游时暂时禁用
看来配置Nginx可以成功到达memcached但无法写入或读取.我可以成功地用telnet写入和读取memcached.
你能帮我吗?
Nginx 1.1.4+ 可以使用 HTTP1.1 keepalive指令提供上游连接,请参阅官方文档(它与 keepalived 客户端的连接不同)。所以 Unicorn 配置可以如下所示:
upstream unicorn {
server unix:/tmp/unicorn.todo.sock fail_timeout=0;
keepalive 4;
}
server {
try_files $uri/index.html $uri @unicorn;
keepalive_timeout 70;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
Run Code Online (Sandbox Code Playgroud)
HTTP 连接需要这些标头:proxy_http_version和proxy_set_header。
那么问题是配置有效还是套接字连接本身是永久的?
如果我想建立一个带有rails(规范案例)的聊天室,可以选择匿名("挑选昵称")和授权(u/n&pw),我将如何用Devise构建它?
我成功地让Devise在后一种情况下工作,这是我正在努力的匿名部分(创建和维护会话).
我想知道为什么我的代码不起作用.我是代码世界的新手,所以如果有人能为我解决这个问题,那么最好如何解决它,谢谢!
我正在尝试创建一个程序,它将从我指定的数字列表中指示素数.
请告诉我为什么这两个代码不起作用!我很困惑第二个代码试图做什么,因为我发现它是别人对我的问题的解决方案.我是编码的新手,但我喜欢它,所以请耐心等待!
这是我的简单代码:
def is_prime?(*nums)
i = 2
nums.each do |num|
while i < num
if num % i == 0
puts "#{num} is not a prime"
else
puts "#{num} is a prime"
end
i += 1
end
end
end
Run Code Online (Sandbox Code Playgroud)
....为什么这不起作用?我怎样才能让它发挥作用?它一直给我一个奇怪的答案,因为它卡在我的第一个数字上并且似乎没有处理我插入的下一个数字:
puts is_prime?(21, 23, 17)
Run Code Online (Sandbox Code Playgroud)
这是我无法正确运行的第二个代码.有人可以打破这里发生的事情吗?我怎样才能让它发挥作用?
def is_prime?(*nums)
nums.each_with_object({}) do |num, hsh|
hsh[num] = num > 1 && 2.upto(num - 1).none? {|i| num % i == 0}
end
end
puts is_prime?(27, 13, 42)
Run Code Online (Sandbox Code Playgroud)
无论如何,我知道这个问题有点令人困惑,但如果有人关心输入他们的2美分我会很感激!哦,最后我如何正确地在问题板上发布代码?没有导师,我是如此新鲜,如此困惑!
我有一个带有我网站静态内容的S3存储桶,我有一个EC2实例,可以接收到网站的所有流量.
我希望每次向EC2发出请求都会从我的S3返回一个特定文件,但我希望保持URL与用户插入的URL相同.
示例:假设我的文件位于/path/index.html如果用户向www.mydomain.com发出请求,我想提供该文件,如果用户向www.mydomain.com/提出请求some/random/path /我仍然想要提供相同的文件.最后一个要求是位置保持不变.也就是说,即使提供了相同的文件,用户仍会在浏览器中看到www.mydoamin.com和www.mydoamin.com/some/random/path/.
这是我到目前为止的nginx配置文件,它似乎不起作用:
server {
listen 80;
ssl off;
location / {
proxy_http_version 1.1;
proxy_set_header Host 'some-host.s3.amazonaws.com';
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 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
proxy_pass http://some-host.s3.amazonaws.com/front-end/index.html;
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何使这项工作的任何想法?
谢谢!