问题 如何使用SSL支持构建uWSGI以使用websocket握手API函数?


我拥有的:  ubuntu 14.4 uwsgi用烧瓶(python)运行,nginx作为反向代理。

我想要的是: 运行WebSockets的这个例子: https://github.com/zeekay/flask-uwsgi-websocket/blob/master/examples/echo/echo.py

当我在端口5000上使用chromepy运行此应用程序时,它工作正常,但当我尝试运行时没有chromepy我得到一个错误

错误:

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

10264
2018-06-12 11:19


起源

当我使用$ uwsgi直接从uWSGI运行时--master --http:8080 --http-websockets --wsgi echo:app它工作正常。 - vovacooper
我有同样的问题。我尝试使用“pip install uwsgi -I”在virtualenv内外重新配置uwsgi,这似乎表明SSL已启用。然而,本机uwsgi安装可能会有一些冲突?是否有可能测试SSL是否已启用? - SLekvak


答案:


我不得不通过brew安装OpenSSL。然后运行此命令。

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

6
2017-08-09 05:23



这对我有用(重新安装 -I 和 --no-cache-dir 选项): CFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" UWSGI_PROFILE_OVERRIDE=ssl=true pip install uwsgi -I --no-cache-dir - Rockallite
在OS X Sierra上我使用了这个命令: CFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" UWSGI_PROFILE_OVERRIDE=ssl=true pip install uwsgi -Iv --no-use-wheel;请注意 --no-use-wheel - Giovanni Di Milia


作为下面提到的海报之一,你需要openssl标题,如果它们在非传统的地方(例如在Mac OS-X上),你必须让uWSGI知道。

在Debian / Ubuntu上安装“apt-get install libssl-dev”。他们将进入/ usr / include /“这是UWSGI自动路径的一部分。你应该完成。

Mac OS-X El Capitan(10.11)删除了openssl标头。您可以使用此命令检查常见位置 - 它们可能已由包管理器(如brew或macports)安装。

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

如果该命令不返回任何内容,则需要安装标头。您可以使用MacPorts(端口安装openssl)将它们安装在/ opt / local / include中,并在/ usr / local / include中添加链接。您也可以通过下载和解压缩openssl,运行“./Configure darwin64-x86_64-cc”,然后“make”,最后“sudo make install”直接安装它们。

Xcode的构建实用程序打包整个预定义的构建环境。使用XCode项目意味着开发人员可以使用共同的基础,并且基础中的任何内容都必须在XCode项目中。在基础之外构建开源项目会变得有点混乱,因为像openssl这样的依赖项存在于基本目录之外。您可以给uwsgi的构建链ONE包含要使用的目录。它不支持PATH样式:分隔符。

在大多数安装情况下,以下内容应适用于OpenSSL。

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

5
2017-11-19 18:32





只需安装openssl开发头文件(libssl-dev)并重建uwsgi(其构建系统将自动检测ssl可用性)


2
2018-06-13 04:17



不起作用:(任何想法? - vovacooper
################# uWSGI configuration ################# pcre = False kernel = Linux malloc = libc execinfo = False ifaddrs = True ssl = True zlib = True locking = pthread_mutex plugin_dir =。 timer = timerfd yaml = embedded json = False filemonitor = inotify routing = False debug = False capabilities = False xml = libxml2 event = epoll ############## uWSGI configuration ##### ######## - vovacooper
但仍然无法正常工作。 - vovacooper
为我工作,谢谢! - joerick


我通过pip(在venv之外)安装uwsgi,并更改init脚本(Ubuntu)/etc/init.d/uwsgi来运行新安装的2.x分支(而不是1.9)来修复我的这个问题的版本。

Pip安装到/ user / local / bin,所以我将行守护进程更改为:DAEMON =“/ usr / local / bin / uwsgi”


1
2017-08-14 16:00



在venv外面安装uwsgi **对我来说是关键! - Yuri Heupa


您可以使用指定开发标头的位置 LDFLAGS。顺便说一句,这可能发生在OS X上,因为El Capitan不再提供标题。

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

0
2017-10-29 15:37





不要安装uwsgi pip install uwsgi! 正确的方法是

  1. 安装 libssl-dev 通过apt-get

  2. 从中下载源文件 https://github.com/unbit/uwsgi然后解压缩

  3. 构建并安装它 python setup.py install 


-1
2018-02-20 06:35