notes

服务器配置

步骤一. 安装acme命令

# 安装acme
curl https://get.acme.sh | sh
# 重新载入bash
source ~/.bashrc
# 试试在终端输入acme.sh命令

步骤二. 使用acme申请Let's Encrypt的ssl证书

注意:Let's Encrypt的证书只有90天的有效期,到期了需要重新申请,这部分acme已经帮你做了。acme在安装的时候往crontab增加了一行每天执行的命令,可以使用crontab -l查看。

acme.sh --issue -d hqqsk8.com -w /data/word-assistant/html

申请成功的话在终端上最后会打印出几个东西,申请的证书就在.acme.sh隐藏文件夹里

...
...
-----END CERTIFICATE-----
[Wed Oct 10 15:22:36 UTC 2018] Your cert is in  /root/.acme.sh/hqqsk8.com/hqqsk8.com.cer
[Wed Oct 10 15:22:36 UTC 2018] Your cert key is in  /root/.acme.sh/hqqsk8.com/hqqsk8.com.key
[Wed Oct 10 15:22:37 UTC 2018] The intermediate CA cert is in  /root/.acme.sh/hqqsk8.com/ca.cer
[Wed Oct 10 15:22:37 UTC 2018] And the full chain certs is there:  /root/.acme.sh/hqqsk8.com/fullchain.cer

步骤三. 安装证书 把证书安装在某个路径下面,路径可以自定义,并设置nginx的restart指令

acme.sh --installcert -d hqqsk8.com \
  --keypath       /root/ssl/hqqsk8.com.key  \
  --fullchainpath /root/ssl/hqqsk8.com.key.pem \
  --reloadcmd     "docker restart wordassistant_nginx_1"

步骤四. 生成dhparam.pem文件

openssl dhparam -out /root/ssl/hqqsk8.com.dhparam.pem 2048

至此,证书的部分已经搞定了,接下来要做的就是让nginx使用这些证书

nginx配置

步骤一. 修改nginx.conf文件(/etc/nginx/nginx.conf),在http块内添加两行代码

http {
    ...
    
    # 新增
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
    ...
}

步骤二. 在server块内增加如下代码

server {
    ...
    
    # 监听的端口由80改成443
    listen 443 ssl;
    # 这边指定的文件都是之前安装证书时的路径
    ssl_certificate         /root/ssl/hqqsk8.com.key.pem;
    ssl_certificate_key     /root/ssl/hqqsk8.com.key;
    ssl_dhparam             /root/ssl/hqqsk8.com.dhparam.pem;
    
    ...
}

步骤三. 因为把80端口换成了443端口,所以http请求已经访问不到了,我们需要做一个转发

server {
    listen       80;
    server_name  hqqsk8.com;
    return 301 https://hqqsk8.com$request_uri;
}

注意:如果nginx是用容器的话,需要把80端口和443端口都要映射到主机的80和443端口上。

参考文章:https://ruby-china.org/topics/31983