title: Nginx重定向及域名CNAME问题 date: 2017-05-29 17:12:05 tags: [Nginx]
关于域名解析的几个问题整理,最近换了博客评论系统,原因是多说马上就停止支持了,所以现在转用网易云跟帖,个人感觉还可以。期间有个域名解析的问题我觉得可以记录下。主要就是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块中的原因。