最近博客启用了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状态:
可以看到返回状态码均为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证书。