У меня в настоящее время есть следующий (hacky), переписывают правило в моем nginx.conf, чтобы позволить динамическим субдоменам быть перенаправленными к некому экземпляру Django.
set $subdomain "";
set $subdomain_root "";
set $doit "";
if ($host ~* "^(.+)\.domain\.com$") {
set $subdomain $1;
set $subdomain_root "/profile/$subdomain";
set $doit TR;
}
if (!-f $request_filename) {
set $doit "${doit}UE";
}
if ($doit = TRUE) {
rewrite ^(.*)$ $subdomain_root$1;
break;
}
Я уверен, что существует более эффективный способ сделать это, но я должен изменить это правило так, чтобы любые запросы к *.domain.com/media/*
или *.domain.com/downloads/*
перейдите в domain.com/media/*
и domain.com/downloads/*
.
На самом деле я думаю, что намного проще изменить правила перезаписи nginx, чем написать промежуточное ПО для django, чтобы это сделать. После прочтения того, как nginx обрабатывает сопоставление местоположения (наиболее точное -> наименее точное), я создал местоположения для / media и / download, а также все местоположение для /, затем переместил правило перезаписи в / location и упростил его - поскольку я больше не беспокоюсь о проверке файлов, потому что все это местоположение передается в django - правило становится:
set $subdomain "";
set $subdomain_root "";
if ($host ~* "^(.+)\.domain\.com$") {
set $subdomain $1;
set $subdomain_root "/profile/$subdomain";
rewrite ^(.*)$ $subdomain_root$1;
break;
}
и, вероятно, было бы еще проще, если бы мой сценарий nginx \ regex был лучше :)
{{1 }}Возможно, лучше было бы настроить django для обработки поддоменов вместо добавления перезаписи на ваш веб-сервер. Вот как я это сделал: http://sharjeel.2scomplement.com/2008/07/24/django-subdomains/