Spec-Zone.ru › Werkzeug 0.15

FastCGI

Очень популярная конфигурация развертывания на серверах, таких как lighttpd и nginx, — FastCGI. Чтобы использовать ваше приложение WSGI с любым из них, сначала потребуется сервер FastCGI.

Самый популярный из них — flup, который мы будем использовать в этом руководстве. Убедитесь, что он установлен.

Создание файла .fcgi

Сначала необходимо создать файл сервера FastCGI. Назовём его yourapplication.fcgi:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from yourapplication import make_app

if __name__ == '__main__':
    application = make_app()
    WSGIServer(application).run()

Этого достаточно для работы Apache, однако nginx и более старые версии lighttpd нуждаются в явном указании сокета для связи с сервером FastCGI. Для этого необходимо передать путь к сокету в WSGIServer:

WSGIServer(application, bindAddress='/path/to/fcgi.sock').run()

Путь должен точно соответствовать пути, определённому в конфигурации сервера.

Сохраните файл yourapplication.fcgi в месте, где вы сможете его найти. Логично расположить его в /var/www/yourapplication или в аналогичном месте.

Убедитесь, что на этом файле установлен исполняемый бит, чтобы сервера могли его выполнить:

# chmod +x /var/www/yourapplication/yourapplication.fcgi

Настройка lighttpd

Базовая конфигурация FastCGI для lighttpd выглядит следующим образом:

fastcgi.server = ("/yourapplication.fcgi" =>
    ((
        "socket" => "/tmp/yourapplication-fcgi.sock",
        "bin-path" => "/var/www/yourapplication/yourapplication.fcgi",
        "check-local" => "disable",
        "max-procs" -> 1
    ))
)

alias.url = (
    "/static/" => "/path/to/your/static"
)

url.rewrite-once = (
    "^(/static.*)$" => "$1",
    "^(/.*)$" => "/yourapplication.fcgi$1"

Не забудьте включить модули FastCGI, alias и rewrite. Эта конфигурация связывает приложение с /yourapplication.

Для получения дополнительной информации о FastCGI и Python см. документацию Lighttpd по адресу FastCGI и Python.

Настройка nginx

Установка приложений FastCGI в nginx немного сложнее, поскольку по умолчанию некоторые параметры FastCGI не передаются должным образом.

Базовая конфигурация FastCGI для nginx выглядит следующим образом:

location /yourapplication/ {
    include fastcgi_params;
    if ($uri ~ ^/yourapplication/(.*)?) {
        set $path_url $1;
    }
    fastcgi_param PATH_INFO $path_url;
    fastcgi_param SCRIPT_NAME /yourapplication;
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

Эта конфигурация связывает приложение с /yourapplication. Если вы хотите разместить его в корне URL, это немного проще, поскольку вам не нужно определять, как вычислить PATH_INFO и SCRIPT_NAME:

location /yourapplication/ {
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
    fastcgi_pass unix:/tmp/yourapplication-fcgi.sock;
}

Поскольку Nginx не загружает приложения FastCGI, вы должны сделать это самостоятельно. Вы можете либо написать скрипт init.d для этого, либо выполнить его в сессии экрана:

$ screen
$ /var/www/yourapplication/yourapplication.fcgi

Отладка

Развёртывания FastCGI часто трудно отлаживать на большинстве веб-серверов. Очень часто единственное, что сообщает серверный журнал, — это что-то вроде «преждевременное завершение заголовков». Для отладки приложения единственное, что действительно может дать вам представление о том, почему оно выходит из строя, — это переключение на правильного пользователя и ручное выполнение приложения.

Этот пример предполагает, что ваше приложение называется application.fcgi, а пользователь вашего веб-сервера — www-data:

$ su www-data
$ cd /var/www/yourapplication
$ python application.fcgi
Traceback (most recent call last):
  File "yourapplication.fcg", line 4, in <module>
ImportError: No module named yourapplication

В этом случае ошибка, похоже, заключается в том, что «yourapplication» не находится на пути python. Распространёнными проблемами являются:

  • использование относительных путей. Не полагайтесь на текущую рабочую директорию
  • зависимость кода от переменных окружения, которые не установлены веб-сервером.
  • использование разных интерпретаторов Python.

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.15.x/deployment/fastcgi/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API