#python #flask
#python #flask
Вопрос:
В настоящее время моя структура сервера выглядит следующим образом:
/srv/http/:
index.html
projects/:
app1/
app2/
appetc/
index.html
Это было приложение Flask, но я изменил его на статическую веб-страницу, поскольку это соответствовало моим потребностям.
Я хочу, чтобы мои несколько приложений (в project
папке) были найдены по URL-адресам, по которым они расположены в файловой структуре. т.е.
app1: http://example.com/app1
app2: http://example.com/app2
appetc: http://example.com/appetc
В настоящее время это не работает. Я могу перейти на домашнюю страницу приложений по соответствующему URL-адресу, но если я нажму на любую ссылку (поскольку это приложение Flask), оно действует так, как будто оно запущено в корне сервера.
У меня есть root-доступ к серверу, и я могу редактировать файлы конфигурации apache, но у меня нет возможности создавать больше поддоменов (мой dns-провайдер ограничивает меня, и в настоящее время я нахожусь на этом пределе). Кроме того, я не настроен на этот макет. В настоящее время я нахожусь на переходном этапе, когда я могу реструктурировать свои приложения так, как я хочу.
Комментарии:
1. Возможно, запустите сервер WSGI (например, twisted) и позвольте ему выдавать разные объекты WSGI на основе пути.
2. В настоящее время у меня есть WSGI с apache. Это похоже?
3. Это проблема с гиперссылками на каждой странице, не указывающими на правильный URL?
4. Вероятно, вам нужно правильно установить
WSGIScriptAlias
. Пример:WSGIScriptAlias /app1 /some/path/to/app1.wsgi
5. @cpb2 mod_wsgi настраивается для использования процесса-демона с
WSGIDaemonProcess
директивой. Это позволяет вам выполнять длительный процесс вместо того, чтобы запускать его для каждого запроса.
Ответ №1:
В документации представлены стратегии для запуска нескольких приложений Flask, например, с использованием промежуточного программного обеспечения от werkzeug:
from werkzeug.wsgi import DispatcherMiddleware
from frontend_app import application as frontend
from backend_app import application as backend
application = DispatcherMiddleware(frontend, {
'/backend': backend
})