我在 AWS IIS 服务器上部署了一个 django 应用程序。静态文件可以通过“runserver”正常提供,但不能通过 IIS 服务器提供。我已正确完成所有操作,但还是不起作用。我甚至尝试添加静态文件夹虚拟目录,但还是不起作用。这是我的 webconfig:
<?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" />
<!-- Add handler for StaticFiles -->
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Unspecified" requireAccess="Read" />
<!-- Add your custom NutMIS handler -->
<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>
这是我的设置:
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / "static"
我的 IIS 中安装了静态文件功能。我的“静态”文件夹放在应用程序文件夹中,它通过 runserver 运行良好,但通过 IIS 上的公共 IP 则不行。请帮我解决此问题。
我也尝试将此 web.config 添加到我的静态文件夹中,但没有作用:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<!--
This removes Helicon Zoo handler and makes IIS processing static files.
-->
<remove name="django.project#x64" />
<remove name="django.project#x86" />
</handlers>
</system.webServer>
</configuration>
答案1
对于未来的读者来说,wfastcgi 已被弃用并且已知存在问题。
如果你恢复与 FastCGI 相关的所有更改并干净地使用 HttpPlatformHandler,你会看到体验是多么流畅,
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<httpPlatform stdoutLogEnabled="true" stdoutLogFile=".\python.log" startupTimeLimit="20" processPath="C:\Users\<user name>\AppData\Local\Programs\Python\Python310\python.exe" arguments=".\mysite\manage.py runserver %HTTP_PLATFORM_PORT%">
</httpPlatform>
</system.webServer>
</configuration>
Python/Django 仍然负责包括静态文件在内的所有事务,而 IIS/HttpPlatformHandler 仅传递请求。
更多详情可参阅我的博客文章。