如何使用Rails应用程序保存SSL证书并在NGINX中创建虚拟主机?
我有一个Rails应用程序,它使用gem Rails Let’s Encrypt为自定义域生成SSL证书。
gem非常简单易用。 安装/配置后,我可以生成证书,数据将存储在数据库中。
我想将certificate CRT
和certificate 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生成证书时,步骤开始。 必须有一些方法来执行这些步骤。 我感谢任何帮助! TKS!
我的环境:
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/
创建了一个vhost文件进行测试。 在rails console
,我运行代码: sudo /user/local/bin/myscript.sh mydomain.com
,shell脚本正确创建文件。
这是一个测试,但有效。 我将创建最终版本并在此处发布最终解决方案。