配置 HTTPS
参考:使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书
我们使用 acme.sh 脚本来配置 SSL。
配置 HTTP 访问
登录服务器并执行 sudo -i 命令切换到 root 用户。在 /etc/nginx/sites-enabled/ 目录创建 deploy-demo.zq-dev.com.conf 文件并输入以下内容。
upstream deploy-demo {
server unix:///var/www/rails-deployment-demo/current/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name deploy-demo.zq-dev.com;
root /var/www/rails-deployment-demo/current/public;
try_files $uri/index.html $uri @deploy-demo;
client_max_body_size 1G;
keepalive_timeout 120;
location @deploy-demo {
proxy_pass http://deploy-demo;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location ^~ /assets/ {
expires max;
gzip_static on;
add_header Pragma public;
add_header Cache-Control public;
}
error_page 500 502 503 504 /500.html;
access_log /var/www/rails-deployment-demo/shared/log/nginx.access.log;
error_log /var/www/rails-deployment-demo/shared/log/nginx.error.log error;
}保存文件后执行 nginx -t 测试配置文件是否有问题,没问题的话执行 service nginx relaod 使配置生效。然后在本地机器的 rails 根目录执行 rails production deploy,部署成功后,通过浏览器访问 http://deploy-demo.zq-dev.com/posts 就能显示之前做的博客列表页面。

使用 acme.sh 签发 TLS 证书
参考 acme.sh 的中文说明来安装、配置 Let’s Encrypt 提供的证书。使用 root 用户身份来安装 acme.sh,因为后续很多文件需要复制到 nginx 相关的目录里,那些目录默认都是 root 用户权限。
执行以下命令来生成 TLS 证书。
成功申请证书的话会有类似以下的内容输出:
安装证书。
成功的话会输出
cd 进入 /var/www/rails-deployment-demo/ssl/ 目录并执行 openssl dhparam -out dhparam.pem 4096 命令,这个命令执行时间会比较长,可能需要 15 ~ 20 分钟。
然后再次编辑 /etc/nginx/sites-enabled/deploy-demo.zq-dev.com.conf 文件,修改为以下内容。
保存后再次执行 nginx -t 检查配置是否有问题,没问题的话执行 service nginx restart 重启 NGINX。
再次到浏览器刷新页面,即可强制 HTTPS 访问了。

也可以访问 https://www.ssllabs.com/ssltest/ 输入域名进行检查。

检查证书更新
因为 Let's Encrypt 的证书有效期只有 90 天,所以我们需要配置定时任务在证书过期更新证书。这部分配置 acme.sh 已经帮你做了的。执行 crontab -l 查看定时任务,正常会输出以下内容。
执行 acme.sh --cron --home "/root/.acme.sh" --force 强制更新以确保证书更新有效。
到此我们就从零开始配置好了一个 rails web 项目的 HTTPS 上线。
Last updated
Was this helpful?