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