在IIS中部署Django实现HTTPS及多站点域名跳转问题
解决方案步骤
1. 替换Django开发服务器,部署为正式WSGI服务(解决HTTPS不支持问题)
开发服务器python manage.py runserver仅支持HTTP,必须通过WSGI部署才能在IIS环境下支持HTTPS,Windows平台推荐使用wfastcgi:
- 安装wfastcgi:
pip install wfastcgi - 启用wfastcgi:执行
wfastcgi-enable,控制台会返回类似C:\PythonXX\python.exe|C:\PythonXX\Lib\site-packages\wfastcgi.py的映射路径,保存该路径备用 - 在Django项目根目录创建
web.config文件,替换以下占位符后使用:<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="你的wfastcgi映射路径" resourceType="Unspecified" requireAccess="Script" /> </handlers> <rewrite> <rules> <rule name="Django Rewrite" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="wsgi.py/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> <appSettings> <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" /> <add key="PYTHONPATH" value="你的Django项目根目录绝对路径" /> <add key="DJANGO_SETTINGS_MODULE" value="你的项目.settings" /> </appSettings> </configuration>
2. 配置IIS后端站点绑定
打开IIS管理器,找到后端站点完成以下绑定:
- 绑定80端口:主机头填写
pr.abcapi.com,IP选择服务器公网IP或* - 绑定443端口:主机头填写
pr.abcapi.com,选择对应的SSL证书(若已有通配符证书可直接复用,无对应证书则需申请pr.abcapi.com域名证书) - 确保前端站点绑定为
pr.app.com的80/443端口,实现两站点通过主机头共用IP和端口
3. 配置DNS解析
登录域名管理后台,添加A记录:将pr.abcapi.com指向服务器公网IP,可通过nslookup pr.abcapi.com命令验证解析是否生效
4. 调整前端API请求地址
将前端原有请求地址http://pr.app.com:8000/APIService/..../修改为https://pr.abcapi.com/APIService/..../,确保请求通过HTTPS访问后端站点
5. 验证与跨域处理
- 直接访问
https://pr.abcapi.com/APIService/测试后端接口是否正常返回 - 若前端出现跨域错误,需在Django中配置CORS:安装
django-cors-headers,在项目settings.py中添加中间件并配置允许的域名:INSTALLED_APPS = [ # 其他应用 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', # 其他中间件 ] CORS_ALLOWED_ORIGINS = ["https://pr.app.com"]
内容的提问来源于stack exchange,提问作者Jose Gutierrez
相关产品推荐
相关产品推荐

