Как я могу одновременно обрабатывать разные хосты, когда Django запускает Gunicorn за Apache?
-
24-12-2019 - |
Вопрос
У меня есть установка Django, в которой я хотел бы запустить несколько вариантов одного и того же сайта:те же данные, другой статический контент, с конечной целью продемонстрировать XYZ, реализованный в различных фреймворках JavaScript.Я бы хотел, чтобы загружались разные домашние страницы, и они выводили свой собственный статический контент.(Все предполагаемые проекты являются СПА-центрами.)
Я попробовал это решение на Как я могу получить доменное имя моего сайта в шаблоне Django?, но в моей системе действующий сайт не указывает имя хоста 'pragmatometer.com';он дает имя хоста 'localhost: 8000', потому что Django / Gunicorn обслуживает страницы как localhost.Я попытался указать в /etc/hosts, что pragmatometer.com равно 127.0.0.1, и использовать прокси Apache для pragmatometer.com, но это привело к ошибке.Это оставляет открытой перспективу запуска отдельных хостов на разных портах, которые должны проксироваться как отдельные, или перенаправления домашней страницы на целевую страницу, специфичную для URL-адреса, решение, которое пожертвовало бы чистым URL-адресом xyz.pragmatometer.com чтобы продемонстрировать реализацию фреймворка XYZ.Я вижу несколько способов заклеить это с помощью JavaScript, только один или два из которых я бы хотел, чтобы будущий босс увидел...
В идеале я хотел бы, чтобы корневой URL-адрес нескольких (суб) доменов содержал домашнюю страницу, специфичную для субдомена, и /load/*
, /save/*
и т.д.согласованный между ними.Я также хотел бы, чтобы корневой URL-адрес использовал свои собственные CSS и JavaScript, но это достаточно просто, если я могу заставить корневой URL работать соответствующим образом.
Лучшее решение, которое я вижу на данный момент, - это наличие отдельных серверных процессов, прослушивающих один и тот же IP-адрес, но имеющих изоморфные серверы, работающие на разных портах и проксируемые разными виртуальными хостингами Apache.Либо это, либо заставить JavaScript определить URL-адрес и перезаписать страницу "реальным" индексом для домена, который немного попахивает.
Комментарии о лучшем решении или о том, как хорошо выполнить вышеуказанное намерение?
--РЕДАКТИРОВАТЬ--
Или другой подход, который мог бы быть немного чище:
Создайте домашний образ, который загружает содержимое /framework/
для каждого фреймворка, а затем document.write() использует его после страница загружена достаточно для document.write(), чтобы заблокировать существующее содержимое страницы.
Если бы я использовал jQuery для сжатия и загрузки страницы таким образом, оставило бы ли это какие-либо загрязнения, которые помешали бы надлежащей работе фреймворков?
Решение
Ваш стек выглядит немного сумасшедшим.
Ты хочешь один веб-сервер с Django, к которому можно получить доступ множественный домены.Каждый домен заставляет приложение Django обслуживать разный контент.Правильно ли я вас понял?
Если да, возможно, вы добились успеха, заменив Apache на Nginx.Он может разрешить запрашивающее имя хоста и решить, как перенаправить запрос:
В чем разница между $host и $ http_host в Nginx
Многодоменный Хостинг С Одним проектом Django
Обновить
Соответствующая документация nginx для различения различных имен хостов:http://nginx.org/en/docs/http/request_processing.html http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name
Соответствующая документация nginx для добавления заголовков запросов:http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header
Также смотрите этот ответ:Добавление и использование заголовка (HTTP) в nginx