背景:搭建了自己的个人博客,然后使用 certbot 生成了泛域名证书,在nginx中设置了 http访问时自动跳转到https,但是发现当访问域名 带www时能跳转到https且正常,访问域名不带www时,无法自动跳转,浏览器提示不安全。
在网上查找不少相关资料,大多数说法都是生成泛域名证书,*.xxx.com,试了结果没用,经过试验,在生成证书时需要把 *.xxx.com 和 xxx.com的域名同时加进去。
我的系统环境是 centos,nginx,域名证书使用的是 certbot来生成的,certbot的安装我这里不说了,主要说下生成证书那一步,网上大多数答案是生成泛域名证书 这样生成的
certbot certonly --preferred-challenges dns --manual -d *.wxmblog.com --server https://acme-v02.api.letsencrypt.org/directory
但是这样生成的证书还是只能在加上www 的情况下使用,正确的命令应该是
certbot certonly --preferred-challenges dns --manual -d wxmblog.com -d *.wxmblog.com --server https://acme-v02.api.letsencrypt.org/directory
里面的区别就是 -d wxmblog.com -d .wxmblog.com 同时为wxmblog.com和.wxmblog.com 同时生成,需要注意的是,执行完命令后会返回一个value 需要先在域名服务商添加解析再继续下一步
那这个值添加到阿里云域名解析处
添加完成后回车就好了,
看到生成的
/etc/letsencrypt/live/wxmblog.com/fullchain.pem
/etc/letsencrypt/live/wxmblog.com/privkey.pem
即使证书路径,在nginx中修改就好了
nginx 配置如下
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
server_name wxmblog.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
server_name bbs.wxmblog.com; # managed by Certbot
#root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://halo;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/wxmblog.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/wxmblog.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
修改nginx配置后重新加载下,nginx -s reload
之后再不加www访问就没问题了
特此记录下,希望能帮到你(吐槽下网上资料居然搜半天都没正确答案)
评论区