как построить uWSGI с поддержкой SSL для использования функции API-интерфейса рукопожатия websocket?

Что у меня: ubuntu 14.4 uwsgi работает с флягой (python) с nginx как обратный прокси.

Что мне нужно: запуск этого примера WebSockets: https://github.com/zeekay/flask-uwsgi-websocket/blob/master/examples/echo/echo.py

Когда я запускаю это приложение с хромированием на порту 5000, он работает нормально, но когда я пытаюсь запустить без хромопии, я получаю сообщение об ошибке

Ошибка:

Thu Jun 12 12:58:24 2014 - you need to build uWSGI with SSL support to use the websocket handshake api function !!!
Traceback (most recent call last):
  File "/home/lab_alglab/rep/car/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/home/lab_alglab/rep/car/local/lib/python2.7/site-packages/flask_uwsgi_websocket/websocket.py", line 54, in __call__
    uwsgi.websocket_handshake(environ['HTTP_SEC_WEBSOCKET_KEY'], environ.get('HTTP_ORIGIN', ''))
IOError: unable to complete websocket handshake

Ответы

Ответ 1

Мне пришлось установить OpenSSL через варево. Затем запустите эту команду.

CFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" UWSGI_PROFILE_OVERRIDE=ssl=true pip install uwsgi -Iv

Ответ 2

В качестве одного из приведенных ниже плакатов вам понадобятся заголовки openssl, и если они находятся в нетрадиционном месте (например, на Mac OS-X), вы должны сообщить uWSGI.

В Debian/Ubuntu установите их с помощью "apt-get install libssl-dev". Они войдут в /usr/include/", который является частью автоматического пути UWSGI. Вам нужно сделать.

Mac OS-X El Capitan (10.11) удалил заголовки openssl. Вы можете проверить общие места с помощью этой команды - они, возможно, были установлены диспетчером пакетов, например, пивом или macports.

find /usr/local/include /usr/include /opt/local/include /usr/local/ssl/include -name openssl -type d 2> /dev/null

Если эта команда ничего не возвращает, вам нужно будет установить заголовки. Вы можете установить их с помощью MacPorts (port install openssl), который поместит их в /opt/local/include со ссылкой в /usr/local/include. Вы также можете установить их напрямую, загрузив и распарив openssl, запустив "./Configure darwin64-x86_64-cc", затем "make" и, наконец, "sudo make install".

Утилиты сборки Xcode устанавливают всю предварительно определенную среду сборки. С проектами XCode, которые означают, что у разработчиков есть общая база для работы, и что-то не в базе должно быть в проекте XCode. Создание проектов с открытым исходным кодом за пределами базы, становится немного беспорядочным, потому что зависимости, такие как openssl, находятся вне базовых каталогов. Вы можете указать Uwsgi build chain ONE include directory для использования. Он не поддерживает стиль PATH: разделитель.

В большинстве случаев установки на OpenSSL должно работать следующее.

UWSGI_INCLUDES=/usr/local/include/ pip install uwsgi  

Ответ 3

просто установите openssl заголовки разработки (libssl-dev) и перестройте uwsgi (его система сборки автоматически обнаружит доступность ssl)

Ответ 4

Я исправил мою версию этой проблемы, установив uwsgi через pip (за пределами venv) и изменив сценарий инициализации (Ubuntu)/etc/init.d/uwsgi, чтобы запустить вновь установленную ветвь 2.x (вместо 1.9).

Пип, установленный в /user/local/bin, поэтому я изменил линейный демона на: DAEMON = "/usr/local/bin/uwsgi"

Ответ 5

Вы можете указать расположение заголовков разработки с помощью LDFLAGS. В стороне, это может произойти и в OS X, так как El Capitan больше не отправляет заголовки.

LDFLAGS="-L/usr/local/lib" pip install uwsgi --no-use-wheel

Ответ 6

Не устанавливайте uwsgi путем pip install uwsgi ! Правильный путь

  1. установить libssl-dev помощью apt-get

  2. загрузите исходный файл с https://github.com/unbit/uwsgi, затем распакуйте

  3. создайте и установите его с помощью python setup.py install