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

网站建设 提交于 2017-01-20 11:53:29

最近博客启用了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的证书吗?

我进行了如下配置,但是无法从https://aaaa.com跳转到https://www.aaaa.com,请问是为什么?
甚至我发现第一个server配置都无用(因为我试着把第一个server直接返回403,发现还是无法跳转,但不提示403权限问题)
# HTTPS server
server {
listen 443 ssl;
server_name aaaa.com;
return 301 https://www.aaaa.com$request_uri;
}
server {
listen 443 default_server ssl;
server_name www.aaaa.com;
if ($host ~ (^\d+)){
return 403;
}

ssl_certificate /usr/local/nginx/cert/www.aaaa.com.crt;#配置证书位置
ssl_certificate_key /usr/local/nginx/cert/www.aaaa.com.key;#配置秘钥位置

修改nginx conf文件后运行service nginx restart重启nginx,如果嫌手动配置麻烦可以使用lnmp.org或oneinstack.com一键安装脚本,通过命令向导式添加站点,添加过程可以自动做好301的重定向,并且这些脚本安装和自己一条条命令安装是完全一样的,可以省去很多配置问题。

发表评论

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