gpt4 book ai didi

ruby-on-rails - 使用mruby,ngx_mruby和redis - 在当前生产服务器上应用

转载 作者:可可西里 更新时间:2023-11-01 11:24:31 24 4
gpt4 key购买 nike

我非常害怕在服务器上做一些修改。因为服务器在当前设置下运行良好。
我将解释:服务器是一个amazon ec2实例。在这种情况下,我有:

ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
rails -v: Rails 4.2.3
nginx -v: nginx/1.8.0
passenger -v: Phusion Passenger version 5.0.10

我有一个负载均衡器,它有一个listner:
Load Balancer Protocol: HTTPS
Load Balancer Port: 443
Instance Protocol: HTTP
Instance Port: 80
SSL Certificate: Using a certificate issued on Amazon Certificate Manager. I have the domain and all sub-domains (wildcard).

此设置允许我:
拥有应用程序的主域:
www.testname.comtestname.com用作机构页面(关于、价格、条款等);
app.testname.com供用户使用系统;
有多少子域是我想要的,因为每个用户都有一个特定的页面:
user1.testname.com
user2.testname.com
user3.testname.com
等。
所有的工作都是动态的。用户在应用程序上注册并有一个子域。在这个子域中,用户可以通过 https://访问。它工作得很好。
用户想使用自己的域名,当然。这部分很容易解决。我在自定义域中创建一个cname记录,指向我们的子域,如下所示:
usercustomname.com    CNAME TO    user1.testname.com

它工作得很好。但是,最大的问题是:“https://”显然无法处理其自定义域名。我们的证书允许域 testname.com及其子域。
使用amazon证书管理器,我可以导入自定义证书。然后,使用awesome rails-letsencrypt gem,我可以生成让我们将证书加密到自定义域名。
但是在 https listner中的amazon负载均衡器只允许使用一个证书!这很糟糕,因为我可以有很多证书,但在整个服务器中只使用一个。
最近, Amazon releases使用sni向 Application Load Balancer发送多个证书。我可以将我的 Classic Load Balancer迁移到 Application Load Balancer,但这并不能解决问题,因为每个负载平衡器的最大证书限制是25。很低。
我找到的解决方案是创建一个 Amazon Elasticache来运行redis服务器。然后,使用 ngx_mruby获取证书。我的计划是这样的:
像这样更改 https listner
实例协议:https
实例端口:443
删除在Amazon证书管理器中颁发的证书
安装mruby
安装 ngx_mruby
使用 rails-letsencrypt gem,为每个机构子域(app,www,empty subdomain)创建一个证书,并为每个用户子域创建一个证书。
创建证书时, rails-letsencrypt gem可以将证书保存在redis中。
使用 ngx_mruby,监听端口443,在redis上获取域的证书。
显然,这是可行的。逻辑似乎是对的,但实际上我不知道。
我的问题是:
1)要安装mruby,我将遵循 these steps。安装后,会不会影响到当前的ruby安装?是否需要更改已作为mruby安装结果开发的系统代码?
2)使用redis会影响当前服务器中的某些内容?尽管亚马逊的账户每月增加了12美元,但我相信使用redis根本不会影响当前的服务器。
3)您认为我计划解决amazon证书限制的方法是否有效?
对不起,这条大短信。我不是服务器专家。这是我唯一的服务器,没有备份。而且我害怕无法修复服务器。
谢谢你的帮助:)
编辑1
ngx_mrubyredis与amazon经典负载均衡器一起使用将不起作用,因为listner https需要一个证书。因此,即使我生成证书并将ngx_mruby与redis连接,在它之前,负载平衡器也将使用默认的域证书进行响应。
但是,我找到了一种方法(它有效):
所有客户URL都具有以下结构:
客户1.myapp.com
客户2.myapp.com
客户3.myapp.com
所有请求都通过负载平衡器使用 httpslistner,并且无法在经典负载平衡器中使用多个ssl证书。然后,我做到了:
注册另一个域,如 myapp.net
使用amazon路由53,我创建了另一个托管区域,并将域dns记录指向该托管区域
在Amazon Route 53中,我创建了以下记录:
键入 A指向实例IP
键入名为 CNAME且值为 *myapp.net
我设置了我的rails应用程序来识别域 myapp.net。这样,对 customer1.myapp.comcustomer1.myapp.net的访问调用相同的资源,但是, customer1.myapp.com使用负载平衡器中的lister https,而 customer1.myapp.net不使用。
我只是将gem生成的ssl证书保存在 /etc/nginx/ssl/文件夹中,然后在nginx中创建一个虚拟主机。之后,终于成功了!
现在,我必须讨论如何将证书保存在文件夹中,以及如何使用rails在nginx中创建虚拟主机。手动过程在my another question中描述。

最佳答案

您需要重新编译nginx以支持ngx-mruby,我们现在不建议使用动态模块特性。因为当人们使用ngx-mruby时,它没有用例。你系统中的ruby版本没有改变。
如果您想启用redis作为rails的缓存,它可能会影响您的网站。但如果您只创建一个新的elasticcache实例,则没有其他副作用。我认为使用elasticcache会比自己托管它得到更好的优化。
我没试过,但可能有用。也许其他人可以回答你的问题。

关于ruby-on-rails - 使用mruby,ngx_mruby和redis - 在当前生产服务器上应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50972425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com