Могу ли я использовать протокол uwsgi для вызова http?

Вот поток данных: http ‹--> nginx ‹--> uWSGI ‹--> python webapp

Я предполагаю, что в nginx есть передача http2uwsgi, а в uWSGI — uwsgi2http.

Что, если я хочу напрямую вызвать uWSGI для тестирования API в веб-приложении?

на самом деле я использую пирамиду. просто настройте [uwsgi] в .ini и запустите uWSGI. но я хочу проверить, нормально ли uWSGI удерживает функцию веб-приложения, сокет uWSGI недоступен напрямую по http.


person whi    schedule 07.09.2012    source источник
comment
Я думаю, вы имеете в виду http вместо html.   -  person roberto    schedule 07.09.2012
comment
Этот вопрос не имеет никакого смысла. Что вы на самом деле хотите сделать?   -  person Daniel Roseman    schedule 07.09.2012


Ответы (3)


Попробуйте использовать uwsgi_curl

$ pip install uwsgi-tools

$ uwsgi_curl 10.0.0.1:3030 /path

или если вам нужно сделать еще несколько запросов, попробуйте uwsgi_proxy из того же пакета

$ uwsgi_proxy 10.0.0.1:3030
Proxying remote uWSGI server 10.0.0.1:3030 "" to local HTTP server 127.0.0.1:3030...

поэтому вы можете просматривать его локально по адресу http://127.0.0.1:3030/.

Если ваше приложение допускает только определенный заголовок Host, вы также можете указать имя хоста

$ uwsgi_curl 10.0.0.1:3030 host.name/path

$ uwsgi_proxy 10.0.0.1:3030 -n host.name

Если в приложении есть статические файлы, вы можете перенаправить такие запросы на ваш фронт-сервер с помощью аргумента -s. Вы также можете указать другой локальный порт, если это необходимо.

person Andrei    schedule 01.10.2015

Из вашего вопроса я предполагаю, что вы хотите напрямую запустить свое WSGI-совместимое приложение с uWSGI и открыть HTTP-Socket. Вы можете сделать это, настроив свой uwsgi.ini (или любое другое имя файла) с помощью

http=127.0.0.1:8080

uwsgi теперь открывает HTTP-сокет, который прослушивает порт 8080 для входящих соединений с локального хоста (см. документацию: http://uwsgi-docs.readthedocs.org/en/latest/HTTP.html)

В качестве альтернативы вы можете напрямую запустить свой процесс из командной строки с помощью http-параметра:

$ uwsgi --http=127.0.0.1:8080 --module=yourapp:wsgi_entry_point

Если вы используете unix-сокеты для настройки uwsgi, nginx может взаимодействовать с этим сокетом через uwsgi-протокол (http://uwsgi-docs.readthedocs.org/en/latest/Protocol.html).

Имейте в виду, что если вы обычно обслуживаете статический контент (css, javascript, изображения) через nginx, вам также потребуется настроить его, если вы запускаете uwsgi напрямую. Но если вы хотите протестировать только REST-API, это должно сработать для вас.

person room2web    schedule 03.12.2015

Сначала рассмотрите эти вопросы:

  • На каком порту работает uWSGI?
  • Работает ли uWSGI на вашей или на удаленной машине?
  • Если он работает на удаленной машине, доступен ли порт с вашего компьютера? (правила iptables могут запрещать внешний доступ)

Если вы убедились, что у вас есть доступ, вы можете просто позвонить http://hostname:port/path/to/uWSGI для прямого доступа к API.

person Fabian    schedule 07.09.2012
comment
Порт uWSGI: 6543, я использую curl на удаленной машине для проверки API, он отвечает пустым. но измените порт nginx (8088), API вернет ожидаемое содержимое. - person whi; 07.09.2012
comment
я думаю, что uWSGI выставит протокол uwsgi на порт 6543, метод http не будет работать. - person whi; 07.09.2012