LNMP配置启用HTTPS

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

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

1
2
3
4
location ~ /\.
{
deny all;
}

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

1
2
3
4
location ~ /.well-known 
{
allow all;
}

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

1
2
3
fullchain.cer
www.mydomain.com.cer
www.mydomain.com.key

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

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

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

1
service nginx reload