Как сохранить сертификат SSL и создать виртуальный хост в NGINX с помощью приложения Rails? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть приложение 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 я генерирую сертификат. Должен быть какой-то способ выполнить эти шаги. Я ценю любую помощь! 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 и в этом сценарии я создаю файл vhost в /etc/nginx/sites-available/ для тестирования. В rails console я запускаю код: sudo /user/local/bin/myscript.sh mydomain.com и сценарий оболочки создает файл правильно.

Это был тест, но работает. Я сделаю окончательную версию и опубликую здесь окончательное решение.

...