You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目部署IIS后遇CORS错误及500内部服务器错误求助

Django部署IIS后CORS跨域+500错误排查方案

一、跨域问题(Access-Control-Allow-Origin缺失)

即便已配置CORS_ALLOW_ALL_ORIGINS=True和CorsMiddleware,仍可能因IIS层干预失效,按以下步骤排查:

  • 禁用IIS独立CORS模块:若IIS安装并单独配置了CORS模块,会覆盖Django输出的响应头。直接卸载该模块,或统一使用Django的CORS中间件处理跨域。
  • 强制中间件顺序:CorsMiddleware必须放在中间件列表最顶部,尤其是在CommonMiddleware之前,示例配置:
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',  # 必须排在第一位
        'django.middleware.common.CommonMiddleware',
        # 其他中间件...
    ]
    
  • 确保请求头完整传递:IIS的URL重写规则可能丢失Origin请求头,需在web.config的重写规则中保留该头:
    <rule name="Django Rewrite" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll">
            <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}" />
        <serverVariables>
            <set name="HTTP_ORIGIN" value="{HTTP_ORIGIN}" />  # 保留Origin请求头
        </serverVariables>
    </rule>
    
  • HTTPS环境补充配置:部署后使用HTTPS的话,添加以下settings配置:
    CORS_ALLOW_CREDENTIALS = True
    SESSION_COOKIE_SECURE = True
    CSRF_COOKIE_SECURE = True
    

二、POST请求500内部服务器错误

其他API正常说明基础环境无问题,重点排查该接口的特殊性:

  • 查看Django错误日志:生产环境默认不输出详细错误,需配置LOGGING写入文件定位问题:
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'file': {
                'level': 'ERROR',
                'class': 'logging.FileHandler',
                'filename': '/path/to/your/django/error.log',  # 确保IIS应用池有权限写入
            },
        },
        'loggers': {
            'django': {
                'handlers': ['file'],
                'level': 'ERROR',
                'propagate': True,
            },
        },
    }
    
  • 检查应用池权限:该接口可能涉及文件写入、外部服务调用等操作,确认IIS应用池的身份(如LocalSystem或具备对应权限的域账户)能访问相关资源。
  • 认证与会话校验:HTTPS环境下会话可能失效,检查请求是否携带正确的认证信息(session cookie或token),同时修正settings中的域名配置:
    SESSION_COOKIE_DOMAIN = 'website.website.com'  # 修正原地址中的重复域名点(website..com)
    CSRF_TRUSTED_ORIGINS = ['https://website.website.com']
    
  • 接口参数验证:对比本地测试与生产环境的POST参数,检查是否存在编码错误、参数缺失或格式不兼容(如JSON字段名大小写不一致)。

三、额外注意点

原请求地址https://website.website..com:8000存在域名重复点(website..com),需先修正为正确域名,这可能同时导致CORS校验和会话验证失败。

内容的提问来源于stack exchange,提问作者Ekrem Şallı

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:12:50