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

vov*_*per 13 python nginx websocket uwsgi

我拥有: 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
Run Code Online (Sandbox Code Playgroud)

小智 10

我不得不通过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
Run Code Online (Sandbox Code Playgroud)

  • 这适用于我(使用`-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` (4认同)
  • 强制它通过源代码构建的标志似乎在不断变化;它是 `CFLAGS="-I/usr/local/opt/openssl/include" LDFLAGS="-L/usr/local/opt/openssl/lib" UWSGI_PROFILE_OVERRIDE=ssl=true pip install uwsgi --no-binary :all: ` 在第 18 点中 (2认同)
  • 添加Pip的--no-cache-dir也可以避免一些混乱。 (2认同)

小智 6

作为下面提到的海报之一,你需要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
Run Code Online (Sandbox Code Playgroud)

如果该命令什么都不返回,则需要安装标头.您可以使用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  
Run Code Online (Sandbox Code Playgroud)


rob*_*rto 3

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