记录一次windows server 2012上部署django服务,把其中的坑记录一下。
背景
服务器系统:Windows Server 2012 x64
后台服务:django4.0
架构:前后端分离,
代理服务器: IIS(Internet Infomation Services)
部署流程
一、django部署
自带的wsgi不适合生产环境使用,这里使用waitress部署django。
- 使用
pip install waitress
安装waitress。 - 在工程根目录创建start_django.py,内容如下:
from waitress import serve
from d3server.wsgi import application
if __name__ == '__main__':
serve(application, host='127.0.0.1', port=8000)
- 然后执行python start_django.py即可。
二、使用IIS代理请求并配置证书
-
windows开启IIS。
(1) 控制面板 > 程序和功能 > 启用或关闭windows功能。
(2) 勾选internet Infomation Services
image.png - 安装扩展
(1)安装 URL 重写模块和 ARR。
URL Rewrite 模块
Application Request Routing (ARR)
(2)安装后重启IIS。
iisreset
-
配置证书和反向代理。
(1)打开 IIS 管理器
在控制面板中选择“系统和安全”,再选择“[管理工具],双击IIS,如下图:
IIS管理器
(2)右键 网站 > 添加网站。
(3)填写配置:
网站名称:DjangoApp(服务名称)
物理路径:任意空目录(如 C:\Websites\DjangoProxy,无需放文件)
绑定 → 添加 HTTPS 绑定:
类型:https
IP 地址:All Unassigned
端口:443 (也可以为其他,比如:8443)
主机名:你的域名(也可以留空,标识接收所有访问)
SSL 证书:选择申请的证书(如 Let's Encrypt 证书或自签名证书)
(4) 配置反向代理
启用代理功能:
打开 IIS 管理器 → 选择服务器 → Application Request Routing Cache → 勾选 启用代理。
(5)添加 URL 重写规则:
右键你的网站(DjangoApp)→ URL 重写 → 添加规则 → 选择 反向代理。
输入后端地址:http://localhost:8000(Waitress 监听的地址, 前边的 http:// 可能不用写,因为写了之后会变成两个http://还需要手动删除一个)。
勾选 SSL 卸载(因为 IIS 已处理 HTTPS,转发到 HTTP 后端)。
会在物理路径下生成web.config文件,内容如下:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxy" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8000/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
(5) 开放防火墙端口:
New-NetFirewallRule -DisplayName "Allow HTTPS 443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
至此后端的https服务配置完成,现在打开 https://[ip]:[port]/[path] 应该就可以访问服务了。
正常都是一个域名申请一个CA证书, 前端部署后,按照使用 IIS代理请求并配置证书第4步配置反向代理之后的操作,在配置url重写规则时使用匹配模式,把正则改为加上^api/(.*)
即可。