Комплекс nginx переписывает правила для субдоменов

У меня в настоящее время есть следующий (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/*.

6
задан halfer 17 April 2017 в 21:28
поделиться

2 ответа

На самом деле я думаю, что намного проще изменить правила перезаписи 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 }}
8
ответ дан 8 December 2019 в 13:45
поделиться

Возможно, лучше было бы настроить django для обработки поддоменов вместо добавления перезаписи на ваш веб-сервер. Вот как я это сделал: http://sharjeel.2scomplement.com/2008/07/24/django-subdomains/

0
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: