当前位置 博文首页 > 文章内容

    apache+djnago+websocket 部署配置

    作者: 栏目:未分类 时间:2020-08-19 14:00:51

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    apache部署websocket

    部署Apache服务器

    1、apache服务的安装这里不做赘述,因为网上一大堆。

    链接:https://blog.csdn.net/qq_24394093/article/details/90550134

    安装Python环境

    链接:https://blog.csdn.net/L_15156024189/article/details/84831045

    为Apache配置Python环境

    1、打开apache安装目录下apache/conf/http.conf配置文件

    我们需要添加的配置项目如下(本文以windows为例子,如果是linux环境,更换路径即可):

    Listen 8000 # 配置程序端口
    LoadFile "c:/users/29582/appdata/local/programs/python/python35/python35.dll" # 配置python库加载 LoadModule wsgi_module "c:/users/29582/appdata/local/programs/python/python35/lib/site-packages/mod_wsgi/server/mod_wsgi.cp35-win_amd64.pyd" # 配置python环境及静态可执行pyd文件 WSGIPythonHome "c:/users/29582/appdata/local/programs/python/python35" # 配置python.exe路径 WSGIScriptAlias / C:/Users/29582/Desktop/IVSWebServer/WebADM/WebADM/wsgi.py # 配置启动文件 WSGIPythonPath C:/Users/29582/Desktop/IVSWebServer/WebADM #配置项目路径 <Directory C:/Users/29582/Desktop/IVSWebServer/WebADM/WebADM> # 授权 <Files wsgi.py> Require all granted </Files> </Directory>

    至此,如果你仅仅是使用python来部署你的django程序的话,就已经可以启动程序,重启apache,环境即部署成功,不需要关注下一步。

    websocket处理

    如果你的代码中使用到了websocket,那上述步骤无法让你的程序成功运行

    你的程序可能报以下错误:liveVideo.vue?cd97:480 WebSocket connection to 'ws://192.168.222.146:8000/analysis/longconnect/' failed: Error during WebSocket handshake: Unexpected response code: 400

    那就表示你的websocket在apache无法正常运行。

    1、首先我们先了解下程序原本的运行方式:

    如果开发环境是在本地,采用python manage.py runserver 127.0.0.1:8000来运行程序的话,前端发送的websocket请求可以直接发送到127.0.0.1:8000这台服务器程序上。

    但是如果你使用apache服务器,apache会过滤掉websocket请求,所以才会报错。

    apache支持代理,可通过代理将所有的websocket请求转发到另外一台专门处理websocket的服务器上处理

    原先请求流程图如下:

    异常情况流程同意图:

    解决方案流程图:

    图中的django程序有两个,虽然名字相同,程序相同,但是跑的是两个服务(一个是apache启动的,一个是命令行启动的)。

    根据上述流程图我们可以知道apache无法将ws直接转发给dajngo程序,可以这么理解如果apache代码的django程序是127.0.0.1:8000端口的服务,那么websocket无法通过apache转发到8000端口,那是不是我们就没有解决方案了呢??

    答案是肯定有解决方案的,通过查询apache官方的文档:http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#page-header

    我们看到,apache是支持代理websocket

    具体配置方式如下:

     1、打开apache安装目录下apache/conf/http.conf配置文件使能mod_proxy.so、mod_proxy_wstunnel.so(将#号去掉即为使能),用来处理ws和wss服务

     

     2、打开apache安装目录下apache/conf/http.conf配置文件在最下方配置

    如果此解决方案对您有帮助,记得给我点赞哈,如有疑问欢迎联系qq:295823911一起探讨。