Django:在 IIS 服务器上提供静态文件的配置

Django:在 IIS 服务器上提供静态文件的配置

我在 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 仅传递请求。

更多详情可参阅我的博客文章

相关内容