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.
- 安装Certbot
sudo apt install certbot python-certbot-nginx
- 运行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 /