Windows下Nginx代理Django项目
Windows下Nginx代理Django项目
django部署到本机网络上后,出现了音频无法快进,进度条无法拖动的问题。原因是前端请求音频文件不是通过后端的api,而是直接用require方法,这样做后端的响应没有包含 Content-Range 或者 Accept-Ranges Header。解决方法有两种:
让django响应静态文件请求时有响应头(即前端通过api请求静态文件,该方法要修改前端,还要在后端单独写方法处理请求)。
用nginx服务器处理静态文件。
考虑将来部署到linux服务器上也需要用nginx,以及实现的难度,我采用第二种方法,即在windows下用nginx处理django项目的静态文件请求。
值得一提的是,大多数django项目部署都需要用到uwsgi和nginx,然而在windows环境下,uwsgi无法下载(或者说使用的代价太大),因此windows下还是简单部署为好,实际项目使用还是需要在linux下。
nginx目的
我们使用nginx的目的是帮助django处理静态文件,nginx起到代理的作用。因此,我们要做的是:
对于静态文件请求,nginx直接处理,无需交与django
对于后端api接口请求,nginx交与django处理
重点:nginx监听的端口和django部署的端口不能是同一个端口
两个程序不能监听同一个端口,这样做会出现有的静态文件通过nginx而有的则通过django的问题。
因此,我们访问项目也不再是django项目部署的端口,而是nginx监听的端口,前端同样是向nginx监听的端口发送api接口请求。
nginx下载
nginx: download官网下载stable version的windows版本并解压。
nginx配置
在解压后的conf文件夹中,修改nginx.conf文件,主要修改http中的server:
listen端口号改为浏览器访问项目的端口号;
server_name改为django项目部署的ipv4地址;
添加location /app(注册的app名称)将前端发送的api请求转发给后端;
添加location /static/处理前端的静态文件请求。
注意:路径一定要正确,用 “/” 而不是 “\” 。
有关location的root、alias、路径末尾是否加 “/” 的问题,参考Nginx之location详解
前端的api请求应转发给后端,因为nginx是不允许静态资源请求使用POST方法的,若通过nginx处理POST请求会报错,解决方法较复杂。
1 |
|
nginx命令
nginx常用的命令如下。
1 |
|
指定配置文件启动命令似乎不行,使用后cmd卡死。
当nginx启动失败或报错后,需要手动在任务管理器关闭进程,此时使用命令并不能真正关闭进程。
启动nginx运行django
先启动nginx,启动成功后,运行django。
访问项目时浏览器地址输入的端口号为nginx监听的端口号。
在浏览器开发者工具的网络里可以查看前端发送的请求,其中server为nginx。