Як WSGI, CGI та рамки пов'язані між собою?
Apache прослуховує порт 80. Він отримує HTTP-запит. Він аналізує запит, щоб знайти спосіб відповісти. Apache має багато варіантів для відповіді. Один із способів відповісти - використовувати CGI для запуску сценарію. Ще один спосіб відповісти - просто подати файл.
У випадку CGI Apache готує середовище та викликає сценарій через протокол CGI. Це стандартна ситуація Unix Fork / Exec - підпроцес CGI успадковує середовище ОС, включаючи сокет і stdout. Підпроцес CGI пише відповідь, яка повертається до Apache; Apache надсилає цю відповідь браузеру.
CGI примітивний і дратівливий. Переважно тому, що він розщеплює підпроцес для кожного запиту, а підпроцес повинен вийти або закрити stdout та stderr, щоб означати кінець відповіді.
WSGI - це інтерфейс, який базується на шаблоні дизайну CGI. Це не обов'язково CGI - він не повинен розщедрити підпроцес для кожного запиту. Це може бути CGI, але цього не повинно бути.
WSGI додає до дизайну CGI декілька важливих способів. Він аналізує заголовки запитів HTTP для вас і додає їх у середовище. Він постачає будь-який POST-орієнтований вхід як файлоподібний об'єкт у середовищі. Він також пропонує вам функцію, яка буде формулювати відповідь, рятуючи вас від безлічі деталей форматування.
Що мені потрібно знати / встановити / зробити, якщо я хочу запустити веб-фреймворк (скажімо, web.py чи вишневий) у своїй базовій конфігурації CGI?
Нагадаємо, що розгортання підпроцесу коштує дорого. Є два шляхи вирішити це.
Вбудований mod_wsgi
або mod_python
вбудований Python всередині Apache; жоден процес не розщеплений. Apache запускає програму Django безпосередньо.
Демон mod_wsgi
або mod_fastcgi
дозволяє Apache взаємодіяти з окремим демоном (або "тривалим процесом"), використовуючи протокол WSGI. Ви запускаєте свій тривалий процес Django, потім налаштовуєте Apache mod_fastcgi для спілкування з цим процесом.
Зверніть увагу, що mod_wsgi
може працювати в будь-якому режимі: вбудований або демон.
Коли ви читаєте на mod_fastcgi, ви побачите, що Django використовує флюп для створення WSGI-сумісного інтерфейсу з інформації, наданої mod_fastcgi. Трубопровід працює так.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django має кілька "django.core.handlers" для різних інтерфейсів.
Для mod_fastcgi, Django забезпечує manage.py runfcgi
те, що інтегрує FLUP та обробник.
Для mod_wsgi для цього є основний обробник.
Як встановити підтримку WSGI?
Дотримуйтесь цих інструкцій.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Для фону дивіться це
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index