首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mruby、ngx_mruby和redis -在当前生产服务器上的应用

使用mruby、ngx_mruby和redis -在当前生产服务器上的应用
EN

Stack Overflow用户
提问于 2018-06-21 15:34:21
回答 1查看 297关注 0票数 0

我非常害怕在服务器上做一些修改。因为服务器在当前设置下运行良好。

我将解释:服务器是一个 EC2实例。在这种情况下,我有:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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).

此设置允许我:

  • 拥有应用程序的主域:
代码语言:javascript
复制
- `www.testname.com` and `testname.com` to use as institutional pages (About, Price, Terms etc.);
- `app.testname.com` for users to use the system;

  • 有多少子域是我想要的,因为每个用户都有特定的页面:
代码语言:javascript
复制
- `user1.testname.com`
- `user2.testname.com`
- `user3.testname.com`
- etc.

所有的工作都是动态的。用户在应用程序上注册,并有一个子域。在这个子域中,用户可以通过https://访问。效果很好。

用户想要使用他们自己的域名,当然。这部分很容易解决。我在自定义域中创建了CNAME记录,指向我们的子域,如下所示:

代码语言:javascript
复制
usercustomname.com    CNAME TO    user1.testname.com

效果很好。但是,最大的问题是:“显然,https://‘没有在其自定义域名上工作。我们的证书允许域testname.com及其子域。

使用,我可以导入自定义证书。然后,使用可怕的rails-让我们加密宝石,我可以生成将证书加密到自定义域名的方法。

但是亚马逊负载均衡器,在https listner中,只允许使用一个证书!这很糟糕,因为我可以拥有很多证书,但在整个服务器中只使用一个证书。

最近,亚马逊发布多个证书使用SNI到Application Load Balancer。我可以将我的Classic Load Balancer迁移到Application Load Balancer,但这并不能解决这个问题,因为最大证书限制是每个负载均衡器25。非常低。

我找到的解决方案是创建一个Amazon Elasticache来运行REDIS服务器。然后,使用姆鲁比获得证书。我是这样计划的:

  • 这样更改https listner
代码语言:javascript
复制
- Instance Protocol: HTTPS
- Instance Port: 443
- Remove the certificate issued in Amazon Certificate Manger

创建证书时,rails-letsencrypt gem可以将证书保存为REDIS。

使用ngx_mruby,侦听端口443,在redis上获取域的证书。

很显然,这会成功的。逻辑似乎是正确的,但我在实践中不知道。

我的问题是:

1)要安装mruby,我将遵循这些步骤。安装后,将影响当前的ruby安装?是否需要更改已开发为mruby安装结果的系统代码?

2)使用REDIS的会影响当前服务器中的某些内容?尽管亚马逊的帐户每月增加12美元,但我相信使用REDIS不会对当前服务器产生任何影响。

( 3)您认为我计划解决Amazon证书限制的方案会有效吗?

抱歉,大短信。我不是服务器专家。这是我唯一的服务器,没有备份。我害怕无法修复的情况下破坏服务器。

( Tks和我感谢您的帮助:)

编辑1

ngx_mrubyredis与Amazon经典负载均衡器一起使用将不起作用,因为listner https需要一个证书。因此,即使我生成证书并将ngx_mruby与redis连接,在此之前,负载均衡器也将响应默认域证书。

但是,我找到了一种方法(起作用):

所有客户URL都具有以下结构:

  • customer1.myapp.com
  • customer2.myapp.com
  • customer3.myapp.com

所有申请都是通过负载均衡器使用https列表,并且无法在经典负载均衡器中使用多个ssl证书。然后,我做了:

  • 注册另一个域,如myapp.net
  • 使用Amazon 53,我创建了另一个托管区域,并将域DNS记录指向此托管区域
  • 在Amazon 53中,我创建了以下记录:
    • 键入A指向实例IP
    • 键入CNAME,名称为*,值为myapp.net

我设置了我的Rails应用程序来识别域myapp.net。这样,对customer1.myapp.comcustomer1.myapp.net的访问调用相同的资源,但是、customer1.myapp.com在负载平衡器中使用lister httpscustomer1.myapp.net不使用。

我只需在/etc/nginx/ssl/文件夹中保存由gem生成的SSL证书,然后在NGINX中创建一个虚拟主机。在那之后,终于起作用了!

现在,我必须讨论如何在文件夹中保存证书,以及如何使用RAILS在NGINX中创建虚拟主机。手动过程在我的另一个问题中进行了描述。

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 01:56:59

  1. 您需要重新编译您的Nginx以支持ngx_mruby,我们现在不建议使用动态模块功能。因为当人们使用ngx_mruby时,它没有用例。你的红宝石版本在你的系统里没有被改变。
  2. 如果您希望启用Redis作为Rails的缓存,它可能会影响您的网站。但是,如果您只创建一个新的ElasticCache实例,那么就没有其他副作用了。我认为使用ElasticCache会比单独托管更好的优化。
  3. 我没试过,但可能管用。也许其他人可以回答你的问题。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50972425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档