我有一个网站(例如:test.com),它有两种子域名:
第一个是主子域,第二个仅用于静态文件(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
,或者有更好的方法可以做到这一点。
答案 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;
}