Как запустить скрипт Python через Nginx?

Вопрос или проблема

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

  1. Установите uWSGI с помощью pip:

    pip install uwsgi
  2. Создайте файл конфигурации myapp.ini для вашего приложения:

    [uwsgi]
    module = wsgi:app  # Укажите модуль и объект приложения
    master = true
    processes = 5
    socket = myapp.sock
    chmod-socket = 660
    vacuum = true
    die-on-term = true
  3. Запустите 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
    }
}
  1. Перезапустите Nginx:
    sudo systemctl restart nginx

2. Использование fcgiwrap

Еще один способ — использование fcgiwrap, который позволяет запускать CGI-скрипты. Это менее распространенный способ, но он также может быть полезен.

Установка fcgiwrap

  1. Установите fcgiwrap:

    sudo apt-get install fcgiwrap
  2. Настройте 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
    }
}
  1. Создайте ваш Python CGI-скрипт, например, script.py:

    #!/usr/bin/env python
    print("Content-Type: text/html\n")
    print("<html><body><h1>Hello, World!</h1></body></html>")
  2. Убедитесь, что скрипт исполняется:

    chmod +x /path/to/your/scripts/script.py
  3. Перезапустите Nginx:

    sudo systemctl restart nginx

Заключение

Теперь, при переходе по вашему домену (или IP-адресу), Nginx будет обрабатывать запросы и перенаправлять их на ваш Python-скрипт через указанный прокси-сервер. Выбор метода зависит от ваших требований и сложности приложения, однако использование WSGI-серверов, таких как uWSGI или Gunicorn, является более распространенным и рекомендуемым способом для развертывания Python-приложений на Nginx.

Оцените материал
Добавить комментарий

Капча загружается...