Вопрос или проблема
Nginx способен запускать PHP-скрипты для генерации контента, который он будет обслуживать.
Как заставить Nginx выполнять произвольную программу, скажем, скрипт на Python, и выдавать её вывод?
Full Stack Python
https://www.fullstackpython.com/nginx.html
ИЛИ:
Модуль Python для Nginx
Модуль позволяет использовать Python в nginx как на этапе конфигурации, так и во время выполнения:
https://github.com/arut/nginx-python-module
Конфигурация nginx с модулем:
# статический модуль
$ ./configure --add-module=/path/to/nginx-python-module
# динамический модуль
$ ./configure --add-dynamic-module=/path/to/nginx-python-module
# версия только для синхронных операций (без блокирующих операций)
$ ./configure --add-module=/path/to/nginx-python-module
--with-cc-opt=-DNGX_PYTHON_SYNC=1
# конкретная установка Python может быть использована, экспортировав
# путь к python-config перед конфигурацией
$ export PYTHON_CONFIG=/path/to/python-config
Используя fastcgi_pass
в nginx.
Вот пример использования fcgiwrap
с perl-скриптом:
https://www.howtoforge.com/serving-cgi-scripts-with-nginx-on-debian-squeeze-ubuntu-11.04-p3
Ответ или решение
Чтобы запустить Python-скрипт через Nginx, необходимо использовать специальный подход, так как Nginx по своей сути не поддерживает выполнение скриптов напрямую. Существует несколько методов, позволяющих решить эту задачу. Вот пошаговое руководство.
1. Использование uWSGI
или Gunicorn
Наиболее распространенный способ взаимодействия Python с Nginx — это использование WSGI-серверов, таких как uWSGI
или Gunicorn
. Эти серверы позволяют запускать ваши Python-приложения и проксировать запросы от Nginx к приложению.
Установка uWSGI
-
Установите
uWSGI
с помощью pip:pip install uwsgi
-
Создайте файл конфигурации
myapp.ini
для вашего приложения:[uwsgi] module = wsgi:app # Укажите модуль и объект приложения master = true processes = 5 socket = myapp.sock chmod-socket = 660 vacuum = true die-on-term = true
-
Запустите
uWSGI
:uwsgi --ini myapp.ini
Конфигурация Nginx
Настройте Nginx для взаимодействия с uWSGI
. Добавьте следующий блок в ваш конфигурационный файл Nginx (обычно находится в /etc/nginx/sites-available/default
):
server {
listen 80;
server_name your_domain.com; # Ваш домен или IP-адрес
location / {
include uwsgi_params;
uwsgi_pass unix:/path/to/myapp.sock; # Путь к сокету uWSGI
}
}
- Перезапустите Nginx:
sudo systemctl restart nginx
2. Использование fcgiwrap
Еще один способ — использование fcgiwrap
, который позволяет запускать CGI-скрипты. Это менее распространенный способ, но он также может быть полезен.
Установка fcgiwrap
-
Установите
fcgiwrap
:sudo apt-get install fcgiwrap
-
Настройте Nginx для использования
fcgiwrap
. Добавьте следующий блок в конфигурацию Nginx:
server {
listen 80;
server_name your_domain.com;
location /cgi-bin/ {
root /path/to/your/scripts; # Путь к вашим скриптам
include fastcgi_params;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_index script.py; # Укажите по умолчанию скрипт Python
}
}
-
Создайте ваш Python CGI-скрипт, например,
script.py
:#!/usr/bin/env python print("Content-Type: text/html\n") print("<html><body><h1>Hello, World!</h1></body></html>")
-
Убедитесь, что скрипт исполняется:
chmod +x /path/to/your/scripts/script.py
-
Перезапустите Nginx:
sudo systemctl restart nginx
Заключение
Теперь, при переходе по вашему домену (или IP-адресу), Nginx будет обрабатывать запросы и перенаправлять их на ваш Python-скрипт через указанный прокси-сервер. Выбор метода зависит от ваших требований и сложности приложения, однако использование WSGI-серверов, таких как uWSGI
или Gunicorn
, является более распространенным и рекомендуемым способом для развертывания Python-приложений на Nginx.