我非常害怕在服务器上做一些修改。因为服务器在当前设置下运行良好。
我将解释:服务器是一个 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.com` and `testname.com` to use as institutional pages (About, Price, Terms etc.);
- `app.testname.com` for users to use the system;
- `user1.testname.com`
- `user2.testname.com`
- `user3.testname.com`
- etc.
所有的工作都是动态的。用户在应用程序上注册,并有一个子域。在这个子域中,用户可以通过https://访问。效果很好。
用户想要使用他们自己的域名,当然。这部分很容易解决。我在自定义域中创建了CNAME记录,指向我们的子域,如下所示:
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:- 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_mruby和redis与Amazon经典负载均衡器一起使用将不起作用,因为listner https需要一个证书。因此,即使我生成证书并将ngx_mruby与redis连接,在此之前,负载均衡器也将响应默认域证书。
但是,我找到了一种方法(起作用):
所有客户URL都具有以下结构:
所有申请都是通过负载均衡器使用https列表,并且无法在经典负载均衡器中使用多个ssl证书。然后,我做了:
myapp.netA指向实例IPCNAME,名称为*,值为myapp.net
我设置了我的Rails应用程序来识别域myapp.net。这样,对customer1.myapp.com和customer1.myapp.net的访问调用相同的资源,但是、customer1.myapp.com在负载平衡器中使用lister https,customer1.myapp.net不使用。
我只需在/etc/nginx/ssl/文件夹中保存由gem生成的SSL证书,然后在NGINX中创建一个虚拟主机。在那之后,终于起作用了!
现在,我必须讨论如何在文件夹中保存证书,以及如何使用RAILS在NGINX中创建虚拟主机。手动过程在我的另一个问题中进行了描述。
发布于 2018-06-22 01:56:59
https://stackoverflow.com/questions/50972425
复制相似问题