部署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//Desktop/IVSWebServer/WebADM/WebADM/wsgi.py # 配置启动文件
WSGIPythonPath C:/Users//Desktop/IVSWebServer/WebADM #配置项目路径 <Directory C:/Users//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一起探讨。