nginx virtual server config

04 Nov 2014

nginx重定向

现有两个host,www.vxixi.com与vxixi.com,两个主机下站点内容一样,又都有baidu索引,考虑到seo,仅保留www.vxixi.com,为不丢流量,将 vxixi.com重定向到www.vxixi.com。

最初的配置使用了nginx rewrite,但是要注意,nginx rewrite返回的http code 为302(临时跳转),配置方法如下:

server {
        server_name  www.vxixi.com;
          if ($host != 'www.vxixi.com' ) {
          rewrite ^/(.*)$ http://www.vxixi.com/$1 permanent;
        }
        ...
}

实际上应该配置为301(永久跳转),配置方法如下:

server {
        server_name www.vxixi.com;
        ...
}
server {
        server_name vxixi.com;
        return 301 http://www.vxixi.com$request_uri;
}

nginx location

目前站点css均使用bootstrap,自适应设备屏幕尺寸的,但是很多页面只在baidu pc端建立了索引,移动端没有收录,并且近期 m.vxixi.com收到了百度移动站点sitemap测试邀请,故想把站点air.vxixi.com映射到m.vxixi.com/air/下,这样我就可以提交 新站的sitemap以增加移动端的索引了。需想办法通过nginx的配置实现这一需求。

location节点下可以设置proxy_pass(http请求代理)和root or alias(静态文件路径),举例说明下:

server_name m.vxixi.com;
location /air/{
  proxy_pass http://air.vxixi.com/;
}
#这样在访问 http://m.vxixi.com/air/时返回的数据流为 air.vxixi.com,uri也一并代理了    
#但是存在问题,air.vxixi.com页面一些默认host的url被映射到了m.vxixi.com而非m.vxixi.com/air/,都变成404了...

继续配置location节点可以部分解决404问题,比如air.vxixi.com/uploads/...

location /uploads/{
  root /airvxixicom_root/
}
#或者
location /uploads/{
  alias /airvxixicom_root/uploads/
}

这样会产生新问题,如果m.vxixi.com下有一个controllor或者目录为uploads,就冲突了,实际情况是assets/目录,这样配置就冲突了....

更好的解决方法还没想到

nginx location rewrite

nginx rewrite可以应用在server层,也可以应用在location层,代码示例:

server_name m.vxixi.com
location /air/{
  rewrite ^/air/(.*)$ http://air.vxixi.com/$1
}

像这样是吧m.vxixi.com/air/重定向(302)到air.vxixi.com/

表示临时跳转,与当前需求并不符合。