Как настроить nginx, пусть некоторые субдомены могут посещать только файлы js / css? - PullRequest
3 голосов
/ 06 июля 2011

У меня есть веб-сайт (например, test.com), который имеет 2 вида поддоменов:

  1. test.com
  2. Статическая _ $ {версия} .test.com

Первый - это основной поддомен, а второй - только для статических файлов (js / css / image). ${version} - это номер версии, он изменяется при появлении новой версии файлов js / css / images, он мне нужен, потому что клиент может кэшировать старые.

Теперь я использую nginx, но я не настраиваю его для поддоменов, просто переписываю все поддомены в основной test.com домен.

Это работает, но однажды я нашел поисковую систему, использую static.test.com в качестве основного домена для посещения моего сайта.

Как мне настроить nginx, чтобы static.test.com мог посещать только статические файлы, в то время как основной домен может посещать все?


UPDATE

Я надеюсь, что запрос static.test.com с js / css / images будет перезаписан в test.com, а не в статический файл на диске. И другие запросы (не js / css / images) будут возвращать 404 напрямую.

Спасибо за Ответ Тимофея Столбова , я сейчас пишу конфиг:

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 Ответ

2 голосов
/ 06 июля 2011

Я использую что-то вроде этого.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...