Https重定向至https

Ghost部署好后默认会申请一个域名的SSL协议以及将http重定向至https. 以我这个域名为例,在访问 http://msyanblog.com 时会自动跳转至 https://msyanblog.com . 然而加了www的域名却没法重定向至根域名,并且Ghost似乎没有给www域名注册SSL(存疑).

给域名申请SSL

由于我注册了另外一个域名 bhyan.com ,并且想把这个域名重定向至msyanblog, 所以先给它上一个SSL协议,不然http可以跳转但https无法跳转.

根据Let's encrypt官方建议,用certbot申请SSL并自动renew. 官方链接,系统:Debian 10.

  1. 安装Certbot
sudo apt install certbot python-certbot-nginx
  1. 运行Certbot. certonly指仅获取证书, 不需要自动修改nginx配置文件.
sudo certbot certonly --nginx

中途输入三个要注册的域名:www.msyanblog.com, bhyan.com, www.bhyan.com.
3. 测试自动renewal功能是否正常

sudo certbot renew --dry-run

若无错误信息则一切正常.

写域名重定向规则

vim /etc/nginx/sites-available/msyanblog.com.conf

添加新的规则

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
 
    server_name www.msyanblog.com bhyan.com www.bhyan.com;
    return 301 https://msyanblog.com$request_uri;
}

对于简单的重定向规则,nginx官方建议用return而不是rewrite, 当然具体用什么自己开心就好.

重新加载nginx的配置文件

sudo nginx -s reload 

不出意外的话你会惊喜的发现所有的http都能正常重定向至主域名,然而在Chrome里所有的https的重定向都被掐掉了(别的浏览器没试过), 原因是重定向的时候没有带上SSL协议的信息, 加上就行了.

Https重定向

sudo certbot certificates

获取SSL证书的路径,例:

Certificate Path: /etc/letsencrypt/live/bhyan.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/bhyan.com/privkey.pem

重新打开nginx的配置文件,修改为

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/bhyan.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/bhyan.com/privkey.pem;
 
    server_name www.msyanblog.com bhyan.com www.bhyan.com;
    return 301 https://msyanblog.com$request_uri;
}

再次reload, http/https就都能正常地重定向至主域名了. 如果不行,清空浏览器缓存. 如果还是不行,建议sudo rm -rf /