Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2011-09-22) 配置nginx,让主域名访问网页,而某个子域名只能访问静态文件

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

我的网站中(以zhidao.it)为例,有两种形式的域名:

  1. zhidao.it 主域名,可访问所有内容
  2. static_$version.zhidao.it 子域名,可访问/public下的静态文件,如js/css/image等

之所以会在2中使用单独的子域名来引用静态文件,主要是为了使客户端打开文件更快;而其中的$version是可变的,当我修改了css/js/image后,在配置文件中修改一下version,客户端便可以使用新的文件。

我在前端使用了nginx,通过反向代理连接到真正的服务器。在配置文件中,我只做了最基本的设置,本来一切正常,但是突然发现百度索引网站时,没有使用zhidao.it的主域名,而是通过static_xxx.zhidao.it

所以我得将nginx重新配置一下,让static_$version.zhidao.it只能访问/public下的静态文件,要访问其它内容,只能使用主域名zhidao.it。

nginx的配置中的核心内容如下:

 # 设置后台服务地址
upstream zhidao.it {
     server 127.0.0.1:8080;
}

# 将www.zhidao.it转到zhidao.it
server {
    listen   80;
    server_name www.zhidao.it;
    rewrite ^/(.*) http://zhidao.it permanent;
}

# 处理static_$version.zhidao.it
server {
    listen 80;
    server_name ~^static_(.*)\.zhidao\.it$;
    root /webs/zhidao.it;

    # 检查请求的地址,是不是以/public开头,"~*"表示"不分大小写的正则"
    if ( $request_uri ~* ^/public/.* ) {
        set $ok '1';
    }

    # 如果不是,永久重定向到zhidao.it
    if ($ok !~ '1') {
        rewrite ^ http://zhidao.it$request_uri permanent;
    }

    # 否则自动去root下找对应的文件
}

# zhidao.it的处理
server {
    listen   80;
    server_name zhidao.it;

    access_log /webs/zhidao.it.logs/access.log;
    error_log /webs/zhidao.it.logs/error.log;
    root   /webs/zhidao.it/;

    location / {
          proxy_pass http://zhidao.it;
    }

}
comments powered by Disqus