title: Nginx重定向及域名CNAME问题 date: 2017-05-29 17:12:05 tags: [Nginx]

20170529-nginxcname-1 关于域名解析的几个问题整理,最近换了博客评论系统,原因是多说马上就停止支持了,所以现在转用网易云跟帖,个人感觉还可以。期间有个域名解析的问题我觉得可以记录下。主要就是DNS的CNAME记录以及Nginx的301、302重定向。

关于DNS的CNAME解析

其实这个也蛮好理解,不涉及数据报内容的改变,就是将要解析的域名指向另一个域名解析。对比A记录就更清晰了,A记录是域名到IP的解析,而CNAME记录是域名解析到域名。所以通过域名的CNAME记录对web访问时没有任何影响的,它只是改变了域名解析的过程而已。

关于URL重定向

所谓URL重定向其实就是URL跳转,这个可以通过Nginx的HttpRewriteModule设置重写http请求头。URL重定向氛围302临时重定向和301永久重定向,301永久重定向会使搜索引擎抓取新的内容时使用重定向后的新地址,而302临时重定向会使搜索引擎抓取新内容时保留重定向前的旧地址。 nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记 flag标记可以用以下几种格式: last – 基本上都用这个Flag。 break – 中止Rewirte,不在继续匹配 redirect – 返回临时重定向的HTTP状态302 permanent – 返回永久重定向的HTTP状态301

  • 301永久重定向Nginx代码
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    server {
            listen       80;
            server_name  arvon.top;
            if ($host = 'www.arvon.top' ) {
                rewrite ^/(.*)$ http://arvon.top/$1 permanent;
                       }
            location / {
                root   html/public;
                index  index.html;
            }
    }
    
  • 302临时重定向Nginx代码
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    server {
            listen       80;
            server_name  arvon.top;
            if ($host = 'blog.arvon.top' ) {
                rewrite ^/(.*)$ http://arvon.top/$1 redirect;
                       }
            location / {
                root   html/public;
                index  index.html;
            }
    }
    

Nginx地址重定向

使用alias或root进行网站路径定义,也可进行资源路径重定向。

  • 使用root定义 语法:root path; 默认:root html; 配置块:http、server、location、if
    1
    2
    3
    
    location /download/ {  
    root /opt/web/html/;  
    }
    
  • 使用alias定义 语法:alias path; 配置块: location;
    1
    2
    3
    4
    5
    6
    7
    
    location /conf {  
        alias /usr/local/nginx/conf/;      
    }
    #如果用root,则如
    location /conf {  
           root /usr/local/nginx/;          
    }
    

使用alias时,在URI向实际文件路径的映射过程中,已经把location后配置的/conf这部分字符串丢弃掉,因此,/conf/nginx.conf请求将根据alias path映射为path/nginx.conf。root则不然,它会根据完整的URI请求来映射,因此,/conf/nginx.conf请求会根据root path映射为path/conf/nginx.conf。这也是root可以放置到http、server、location或if块中,而alias只能放置到location块中的原因。

更详细的说明

1. 大风的博客:nginx配置url重定向-反向代理 2. 网站路径定义