部署 关于 Nginx 的跳转配置

hxh1246996371 · 2016年01月05日 · 最后由 hxh1246996371 回复于 2016年01月06日 · 4914 次阅读

最近在折腾 https,期间遇到了一些重定向问题(导致某些地址不能访问,百度收录瞬间降了很多),所以在此记录一下。

其实我最终要实现的是,访问下面中的每个地址都会跳转到 https://www.awesomes.cn (后面的子路径就省略了)

http://awesomes.cn http://www.awesomes.cn https://awesomes.cn https://www.awesomes.cn

最终的配置如下:

http{
  ....

   #屏蔽IP访问
    server {
        listen 80 default;
        rewrite ^(.*) https://www.awesomes.cn permanent;
    }

   #https 配置
   server {
      listen 443 ssl;
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      server_name  www.awesomes.cn;
      .....
   }

  #https 跳转
   server {
      listen  443 ssl;
      server_name    awesomes.cn;
      rewrite ^(.*)$  https://www.awesomes.cn$1 permanent;
    }

   #http 跳转
  server {
      listen  80;
      server_name    www.awesomes.cn  awesomes.cn;
      rewrite ^(.*)$  https://www.awesomes.cn$1 permanent;
   }


   ....



}

关于禁止 IP 访问

其实之前我也知道,默认情况下,IP 是可以访问 Nginx 配置中的第一个 80 server 的(显示声明listen 80 default 除外)。但是考虑到没啥大问题,用 IP 访问我又咋样呢,对吧。直到今天,同事有多个域名都指向了同一台阿里云服务器,但只是做了域名解析,并没有在配置中做 server_name 声明,居然也能访问站点。

奇怪了,找了半天答案,才想到应该是所有域名其实就相当于访问这个 IP,有指定 server_name 的就访问相应的站点,没有指定的肯定就走默认站点了。

这导致的后果就是,假如百度没有做 IP 禁止访问的话,那我完全可以在没有限制的条件下把我的域名指向百度的 IP 了。

关于 https 的跳转

上面有一段是 https 跳转,为什么要加这个呢?如果不加的话,https://awesomes.cnhttps://www.awesomes.cn 是两个不同的地址,而处于某些原因,是否应该将其指向一个地址?(这里我不确定该不该这样做,或者该这样做是什么原因,SEO 吗?有知道的同学麻烦提示一下)因为我看了一下,很多知名站点(不包括 Ruby China)是跳到一个地址的:

百度 * -> https://www.baidu.com/ Github * -> https://github.com/ 淘宝 * -> https://www.taobao.com/ producthunt * ->https://www.producthunt.com/

www 和 无 www 是完全两个不同的地址。跳不跳转首先考虑你是否将这两个地址作为两个站点来处理. 如果你希望 www 和非 www 都访问同一个站点。那么从 seo 上面考虑,是必须跳转的,你不做跳转,会导致多个版本的同一页面。 https://abc.com http://abc.com https://www.abc.com http://www.abc.com 全部跳转到一个版本上。

#1 楼 @chenjau 正是这样,但是很多知名站点都是指向的一个,所以这样做是否有什么好处呢 ?

好处当然是避免同页面多版本的问题。seo 当中需要解决的一个问题就是重复页面。利于 link juice 的归聚,避免无意义的分散。具体可以系统参考下 seo 方面的内容。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号