如何使用Rails应用程序在NGINX中保存SSL证书并创建虚拟主机?

时间:2018-07-05 14:36:13

标签: ruby ruby-on-rails-4 nginx ubuntu-14.04

我有一个Rails应用,该应用使用gem Rails Let's Encrypt为自定义域生成SSL证书。

宝石非常易于使用。安装/配置完成后,我可以生成一个证书,数据将存储在数据库中。

我想将certificate CRTcertificate KEY保存在各自的NGINX文件夹中:/etc/nginx/ssl/

之后,我要:

  • 复制文件/etc/nginx/sites-available/default并保存为名称/etc/nginx/sites-available/customdomain.com

  • 使用以下命令更改文件customdomain.com

内容:

server {
    listen 80;
    listen 443 ssl;
    server_name www.customdomain.com;
    ssl_certificate /etc/nginx/ssl/customdomain.crt;
    ssl_certificate_key /etc/nginx/ssl/customdomain.key;
    passenger_enabled on;
    root /home/ubuntu/myapp/current/public;
    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript
    gzip_disable "msie6";
    location ^~ /assets/ {
        expires max;
        add_header Cache-Control public;
    }
}
  • sites-enabled中使用以下代码创建指向该文件的链接:sudo ln -s /etc/nginx/sites-available/customdomain.com /etc/nginx/sites-enabled/

  • 重新启动nginx:sudo service nginx restart

我手动完成了这些步骤,并且SSL正常运行。 如何以编程方式执行此操作?

请记住,当我使用Rails生成证书时,这些步骤开始。必须有某种方法来执行这些步骤。感谢您的帮助!谢谢!

我的环境:

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
Ubuntu 14.04.2 LTS
Amazon EC2 instance (without load balancer, because LB requires only one certificate in the https)

编辑1

也许,有一种使用通配符配置的方法。我没有为每个域创建一个虚拟主机,而是仅创建了一个文件,如下所示:

/etc/nginx/sites-enabled/wildcard

在此文件中,我做了如下修改:

server_name {{customdomain_url}};
ssl_certificate /etc/nginx/ssl/{{customdomain}}.crt;
ssl_certificate_key /etc/nginx/ssl/{{customdomain}}.key;

如果可能的话,会更好,因为作业仅保存证书文件。 并且不需要重启nginx

编辑2-方式

我在/user/local/bin/myscript.sh中创建了一个shell脚本,并在此脚本中,在/etc/nginx/sites-available/中创建了一个虚拟主机文件进行测试。在rails console中,我运行代码:sudo /user/local/bin/myscript.sh mydomain.com,shell脚本正确创建了文件。

这是一个测试,但是有效。我将创建最终版本并在此处发布最终解决方案。

0 个答案:

没有答案