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

部署在AWS IIS服务器上的Django应用静态文件无法加载求助

部署在AWS IIS服务器上的Django应用静态文件无法加载求助

看起来你已经踩了不少坑但还没解决问题,别着急,咱们从几个关键环节一步步排查修复:

一、先确认静态文件是否已正确收集到STATIC_ROOT

Django在生产环境下不会自动托管静态文件,必须先执行collectstatic命令,把所有app的静态文件集中到STATIC_ROOT指定的目录:

python manage.py collectstatic

执行后检查C:\myvenv2\NutMIS\static目录下是否有完整的静态文件(比如css、js、图片等),如果目录为空或文件不全,那肯定加载失败。

二、调整IIS主web.config的Handler顺序和匹配规则

你当前的主web.config里,FastCgi的handler匹配path="*",会拦截所有请求(包括静态文件),导致StaticFileModule根本没机会处理静态文件。需要修改handler的顺序和路径匹配规则:

修改后的主web.config(重点看handlers部分):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
<!-- Your django path -->
<add key="PYTHONPATH" value="C:\myvenv2\NutMIS" />
<!-- Your djangoname.settings -->
<add key="DJANGO_SETTINGS_MODULE" value="NutMIS.settings" />
</appSettings>
<system.webServer>
<handlers>
<!-- Remove duplicate entries -->
<remove name="NutMIS" />
<remove name="StaticFiles" />
<remove name="StaticFile" />

<!-- 优先处理静态文件请求,精准匹配/static/开头的路径 -->
<add name="StaticFile" path="/static/*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />

<!-- 再处理Django动态请求,匹配剩余所有路径 -->
<add name="NutMIS" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Users\Administrator\AppData\Local\Programs\Python\Python311\python.exe|C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<staticContent>
<mimeMap fileExtension=".*" mimeType="application/octet-stream" />
</staticContent>
</system.webServer>
</configuration>

关键变化说明:

  • 把StaticFile handler放在FastCgi handler前面,让IIS优先处理静态文件请求
  • StaticFile的path改成/static/*,精准匹配静态文件的URL路径
  • 把resourceType从Unspecified改成File,明确告诉IIS这是处理文件请求

三、检查静态文件夹的权限设置

AWS IIS服务器上,要确保C:\myvenv2\NutMIS\static目录给IIS的应用池用户或IIS_IUSRS组赋予读取权限:

  1. 右键静态文件夹 → 属性 → 安全选项卡
  2. 添加用户/组,找到IIS_IUSRS(或你的应用池对应身份)
  3. 勾选“读取”和“列出文件夹内容”权限,保存

四、验证虚拟目录配置(如果已设置)

如果你给静态文件夹创建了虚拟目录,要确保:

  • 虚拟目录的别名是static,和STATIC_URL = '/static/'完全对应
  • 虚拟目录的物理路径指向C:\myvenv2\NutMIS\static(即STATIC_ROOT的路径)
  • 虚拟目录的“权限”里启用了“读取”

五、调整静态文件夹内的web.config

你之前添加的静态文件夹web.config可以简化,确保它不干扰静态文件处理:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<!-- 移除所有可能拦截静态文件的Django相关handler -->
<remove name="NutMIS" />
<remove name="django.project#x64" />
<remove name="django.project#x86" />
<!-- 确保静态文件handler生效 -->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>

做完这些调整后,重启IIS服务器,再访问应用看看静态文件是否能正常加载。如果还是有问题,可以查看IIS日志(通常在C:\inetpub\logs\LogFiles目录),看静态文件请求的返回状态码(404/500等),进一步定位问题。

备注:内容来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 15:54:29