Для “связки” NGINX и Python-скриптов будем использовать протокол WSGI, котором хорошо написано тут>>>.
Передачей данных в данном случае будет заниматься сервер uWSGI, домашняя страница проекта тут>>>.
Т.е., в нашей схеме на “входе” будет принимать соединения NGINX, передавать их uWSGI, который в свою очередь будет вызывать Python-скрипты.
Установка выполняется на:
# cat /etc/redhat-release CentOS release 6.5 (Final)
Устанавливаем необходимые для сборки пакеты:
# yum -y install python python-pip python-devel libxml2 libxml2-devel python-setuptools zlib-devel wget openssl-devel pcre pcre-devel gcc make autoconf automake
Устанавливаем сам uWSGI:
# pip install uwsgi ... *** uWSGI is ready, launch it with /usr/bin/uwsgi *** Successfully installed uwsgi Cleaning up...
Проверяем:
# uwsgi --version 2.0.8
Отключаем фаервол на время настройки:
# service iptables stop
Создаём тестовый файл hello.py с таким содержимым:
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["Hello World"]
Запускаем uWSGI:
# uwsgi --http :9090 --wsgi-file hello.py *** Starting uWSGI 2.0.8 (32bit) on [Sat Nov 8 18:59:03 2014] *** compiled with version: 4.4.7 20120313 (Red Hat 4.4.7-11) on 08 November 2014 18:51:18 os: Linux-2.6.32-504.el6.i686 #1 SMP Wed Oct 15 03:02:07 UTC 2014 nodename: centos_1 machine: i686 clock source: unix pcre jit disabled detected number of CPU cores: 1 current working directory: /home/setevoy/python_application *** running under screen session 1353.pts-0.centos_1 *** detected binary path: /usr/bin/uwsgi uWSGI running as root, you can use --uid/--gid/--chroot options *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** ...
Открываем в браузере:
$ curl http://localhost:9090 Hello World
uWSGI работает. Переходим к NGINX.
Устанавливаем:
# yum -y install nginx
Под обычным пользователем создаём директорию хоста:
# su -l setevoy
$ mkdir python_application
$ cd python_application/
Создаём такой же файл, как и раньше:
$ vim hello.py
def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return ["Hello World"]
Создаём файл настроек хоста:
# cd /etc/nginx/conf.d
# mv default.conf default.conf.bkp
# vim newhost.conf
server { listen 80 default_server; server_name newhost.com www.inewhost.com; access_log /var/log/nginx_access.log; error_log /var/log/nginx_error.log; root /home/setevoy/python_application; location / { uwsgi_pass 127.0.0.1:9090; include uwsgi_params; } }
Проверяем и запускаем:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
# service nginx start Starting nginx: [ OK ]
Так как это тестовая установка – в файл /etc/hosts
добавляем строку 127.0.0.1 newhost.com
:
# cat /etc/hosts 127.0.0.1 localhost 127.0.0.1 newhost.com
Проверяем.
От пользователя запускаем uWSGI:
$ uwsgi --socket 127.0.0.1:9090 --wsgi-file hello.py --master --processes 1 --threads 2
Открываем браузер:
$ curl http://newhost.com:80 Hello World
Что бы упростить запуск uWSGI – создадим ini
-файл:
$ cat hello.ini [uwsgi] socket = 127.0.0.1:9090 chdir = /home/setevoy/python_application wsgi-file = hello.py processes = 1 threads = 2
Теперь, для запуска, достаточно выполнить:
$ uwsgi hello.ini
Ссылки по теме
http://uwsgi-docs.readthedocs.org
http://uwsgi-docs.readthedocs.org