HTTPS证书使用由Let's Encrypt提供的免费证书,有个很方便的小工具可以帮助快速获得证书,参见https://github.com/Neilpang/acme.sh

LNMP在使用acme.sh申请证书之前需要修改站点的nginx配置,否则会因无法验证导致申请失败。

location ~ /\.
{
deny all;
}

这段配置删掉或注释掉或在这段配置前面加上

location ~ /.well-known 
{
allow all;
}

在使用acme.sh成功申请到证书后有三个文件。我同时申请了顶级域名mydomain.com和二级域名www.mydomain.com的证书,acme会自动将两个域名生成单目录多域名证书,这样也方便配置。(此处域名为示例)

fullchain.cer
www.mydomain.com.cer
www.mydomain.com.key

在配置ssl时只需要使用fullchain.cer和www.mydomain.com.key,fullchain.cer包含有完整的证书链。如果使用www.mydomain.cer,则在手机浏览器上浏览网站会出现证书不受信任的提示,因为证书链不完整。站点nginx配置文件server段修改如下

server
    {
        #listen 80;
        listen 443 ssl;
        #listen [::]:80;
        server_name www.mydomain.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/www.mydomain.com;
        ssl_certificate      /home/ssl/fullchain.cer;
        ssl_certificate_key  /home/ssl/www.mydomain.com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;

        #后面的省略...
    }

上面的配置server_name只有www.mydomain.com,因为我要将顶级域名重定向到www二级域名。重定向的方法,在nginx配置文件最后面再添加一段server

server
    {
        listen 80;
        listen 443 ssl;
        server_name www.mydomain.com mydomain.com;
        rewrite ^/(.*)$ https://www.mydomain.com/$1 permanent;
    }

修改完成后,重新加载nginx配置即可

service nginx reload