@TTV

Настройка virtualhosts в uWSGI?

Хочу попробовать сделать два сайта с одним бэкэндом.
Планирую использовать Django-sites-framework + uWSGI + NGINX. По настройке последнего в сети вроде нашел информацию, а вот по связке Django-sites-framework + uWSGI найти удалось не много. На сколько я понял из того что удалось почитать - нужно настраивать сокеты и virtualhosts uWSGI для направления запросов к соответствующим сайтам. Кто-нибудь знает как настраивать на примере двух доменов?
Заранее спасибо.
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Dirlandets
Привет!
На примере моей задачи: одна бд на несколько однотипных сайтов, нужно было отображать разную главную страницу, подгружать немного разные стили css, контакты и т.д.

В settings.py
INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    ...
]
ALLOWED_HOSTS = ['subdomen.example.com', 'example.com', 'subdomen2.example.com']


Не забудь мигрировать.
В админке появится раздел "сайты", где можно добавить домены 'subdomen.example.com', 'example.com', 'subdomen2.example.com'.

Во views.py
current_site = get_current_site(request).domain # можно использовать id, но мне показалось нагляднее использовать domain
if current_site == 'subdomen.example.com':
   # ...some logic например разный context или template
elif  current_site == 'subdomen2.example.com':
   # ...some logic например разный context или template


Для nginx все просто, для каждого домена создаешь конфиг, просто они ведут в одно место (сокет/порт ), можно создать один конфиг с if и т.д. но по мне так неудобно.

...
location / {
            # в сокет
            proxy_pass http://unix:/tmp/example.socket; 
            # в порт, выбери одно
            #proxy_pass http://127.0.0.1:8000; 
            proxy_set_header Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...


Есть еще вариант когда нужна совсем разная логика, тогда создается несколько файлов settings.py
И нумеруются SITE_ID=1, SITE_ID=2, SITE_ID=3

По uWSGI не могу вспомнить есть ли там нюансы, я давно пользуюсь gunicorn (привык просто)
Но никаких особых настроек отличающихся от обычных делать не нужно:
gunicorn --bind unix:/tmp/unix:/tmp/example.socket project.wsgi:application
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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