如何配置nginx,让一些子域只能访问js / css文件?

时间:2011-07-06 04:01:32

标签: nginx subdomain

我有一个网站(例如:test.com),它有两种子域名:

  1. test.com
  2. 静态_ $ {版本} .test.com
  3. 第一个是主子域,第二个仅用于静态文件(js / css / image)。 ${version}是版本号,当有新版本的js / css / images文件时会更改,我需要它,因为客户端可能会缓存旧版本。

    现在我使用nginx,但我没有对子域进行配置,只需将所有子域重写到主test.com域。

    虽然有效,但有一天我发现了一个搜索引擎,使用static.test.com作为主域名来访问我的网站。

    如何配置nginx,让static.test.com只能访问静态文件,而主域可以访问所有?


    更新

    我希望使用js / css / images的static.test.com请求将重写为test.com,而不是磁盘中的静态文件。其他请求(不是js / css / images)将直接返回404

    感谢Timofey Stolbov's answer,我现在写一个配置:

    server {
        listen 80;
        server_name ~^static_(.*)\.test\.com$;
        set $version $1;
        rewrite ^/public/(.*) http://test.com/public/$1?v=$version last;
        return 404;
    }
    

    由于我的js / css / images文件都在“public”目录中,所以我只检查它是否以“public”开头。如果没有,只需返回404。

    但我不知道它是否正确,尤其是return 404,或者有更好的方法可以做到这一点。

1 个答案:

答案 0 :(得分:2)

我使用这样的东西。

server {
  server_name static.test.com;
  root /var/www/static;
  location / {
    rewrite ^/([^\/]+\.css)$ /css/$1 break;
    rewrite ^/([^\/]+\.js)$ /js/$1 break;
    rewrite ^/([^\/]+\.(png|jpg|jpeg))$ /images/$1 break;
  }
}

对于第二个问题

是的,你的cofig是正确的。但是你应该使用永久重定向或者nginx会使用302 Moved Temporarily重定向请求。默认情况下也暗示listen 80

我不认为对每个js / css / image使用重定向是个好主意,所以请三思而后行。 :)

这是配置。

server {
    server_name ~^static_(.*)\.test\.com$;
    set $version $1;
    rewrite ^/public/(.*) http://test.com/public/$1?v=$version permanent;
    return 404;
}