我有一个Rails应用,该应用使用gem Rails Let's Encrypt为自定义域生成SSL证书。
宝石非常易于使用。安装/配置完成后,我可以生成一个证书,数据将存储在数据库中。
我想将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生成证书时,这些步骤开始。必须有某种方法来执行这些步骤。感谢您的帮助!谢谢!
我的环境:
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)
也许,有一种使用通配符配置的方法。我没有为每个域创建一个虚拟主机,而是仅创建了一个文件,如下所示:
/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 。
我在/user/local/bin/myscript.sh
中创建了一个shell脚本,并在此脚本中,在/etc/nginx/sites-available/
中创建了一个虚拟主机文件进行测试。在rails console
中,我运行代码:sudo /user/local/bin/myscript.sh mydomain.com
,shell脚本正确创建了文件。
这是一个测试,但是有效。我将创建最终版本并在此处发布最终解决方案。