nginx 301重定向带www的https链接配置方法

最近博客启用了https,为了实现http://tuhongwei.com、http://www.tuhongwei.com、https://tuhongwei.com 用301重定向https://www.tuhongwei.com查了很多资料,没有找到完美的解决方案,最终自己摸索出方案,废话少说,直接上conf配置代码。

server {
    listen 80;
    server_name tuhongwei.com www.tuhongwei.com;
    return 301 https://www.tuhongwei.com$request_uri;
}
server {
    listen 443 ssl;
    ssl_certificate  /home/wwwroot/PHP7/etc/tuhongweissl/tuhongwei.crt;
    ssl_certificate_key  /home/wwwroot/PHP7/etc/tuhongweissl/tuhongwei.key;
    server_name tuhongwei.com;
    return 301 https://www.tuhongwei.com$request_uri;
}
server {
    listen 443 ssl;
    ssl_certificate  /home/wwwroot/PHP7/etc/tuhongweissl/tuhongwei.crt;
    ssl_certificate_key  /home/wwwroot/PHP7/etc/tuhongweissl/tuhongwei.key;
    server_name  www.tuhongwei.com;
.......
}

说明:第一段代码是将http://www.tuhongwei.com和http://tuhongwei.com  301重定向https://www.tuhongwei.com,第二段代码是将https://tuhongwei.com 301重定向https://www.tuhongwei.com,第三段代码为指定主机用ssl连接,......为网站程序的配置文件。

然后用站长工具 http://tool.chinaz.com/pagestatus/ 检查下http状态:

nginx强制启用https方法

http 301跳转到带www的https链接方法

可以看到返回状态码均为301,所有http和不带www的域名都301重定向到了带www的https链接,这样有利于SEO

从网上看到另一种方式实现nginx链接301跳转到带www https的方法,配置如下:

server {
    listen 80;
    listen 443 ssl;
    server_name tuhongwei.com;
    return 301 $schmeme://www.tuhongwei.com$request_uri;
}
server {
    listen 80;
    server_name *.tuhongwei.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name www.tuhongwei.com tuhongwei.com;
    root  /home/wwwroot/PHP7/domain/aihaba.com/web$subdomain;
    ssl_certificate  /home/wwwroot/PHP7/etc/aihabacom/214014475050178.pem;
    ssl_certificate_key  /home/wwwroot/PHP7/etc/aihabacom/214014475050178.key;
 ......
}

第一段代码是将tuhongwei.com 301跳转到www.tuhongwei.com 不管是http还是https链接。

第二段代码是把任何非https的二级域名(www.tuhongwei.com实际上是个二级域名)跳转到https的对应二级域名。

第三段是应对https的请求,挂载https证书。

如果文章对你有帮助,请赞赏支持本站发展!

评论

你好,看了上面配置,tuhongwei.com和www.tuhongwei.com用的是同一套安全证书,请教怎么实现的?我用的let's encrypt通配符证书,对*.example.com有效,同时设置了http://example.com和http://www.example.com的301跳转到https://www.example.com,但是如果手动输入https://example.com就会出现证书不匹配,当然一般访客不会这么做,输入example.com,自动到https://www.example.com了。难道要另外申请example.com的证书吗?

发表评论

此字段内容将保密,不会被其他人看见。