IIS 上的 Django:调试由于大文件上传上的 FastCGI 请求超时而导致的 IIS 错误

cja*_*jac 5 iis django

我正在尝试在带有 IIS 10 和 FastCGI 的 Windows 10 计算机上托管 Django Web 应用程序。虽然到目前为止一切都运行良好,但我在上传较大文件(~120MB)时遇到了某些 POST 请求的问题,即 HTTP 500 错误。我现在不知道如何进一步调试。

我通过增加请求限制解决了错误“413.1 - 请求实体太大”。但是,现在我收到一个 HTTP 错误,内容如下:

C:\Apps\Python3\python.exe - The FastCGI process exceeded configured request timeout
Run Code Online (Sandbox Code Playgroud)

超时设置为 90 秒,我可以看出,文件上传完成后,我的浏览器正在等待服务器的响应。

在 Django 视图中不需要执行太多操作来响应请求。如果我在同一台计算机上运行 django 开发服务器,则响应将在文件上传后几秒钟内发送。IIS 发送 HTTP 500 响应所需的持续时间延长了 1 分钟以上。

我在 post() 方法中的 Django 视图中添加了一些代码,以便在调用该方法时向文件中写入一些内容:

def post(self, request, *args, **kwargs):
    with open(os.path.join(settings.REPORT_DIR, "view_output.txt"), "w") as f:
        f.write("tbd.")
(...)
Run Code Online (Sandbox Code Playgroud)

However, this action is never performed, although it works in other Django-Views. I therefore assume a problem with IIS processing the request.

I enabled FREB logging, but am a little lost with interpretation. The "Errors & Warnings" just state the LOG_FILE_MAX_SIZE_TRUNCATE event, probably due to the large request.

Since I'm new to IIS, how can I debug any further?

Thank you very much!

Jal*_*hal 5

要解决该问题,您可以按照以下步骤操作:

IIS 默认文件上传大小为 30mb(30000000 字节),通过使用以下命令增加此值:

  • 打开 IIS 管理器,选择您的站点。

  • 双击中间窗格中的请求过滤功能。

在此输入图像描述

  • 从屏幕右侧的“操作”窗格中,单击“编辑功能设置...”链接。

在此输入图像描述

  • 在“请求限制”部分中,输入适当的最大允许内容长度(字节),例如2147483648,这意味着2GB,然后单击“确定”按钮。

在此输入图像描述

  • 单击“确定”并应用设置,然后返回。

    增加站点连接超时:

  • 打开 Internet 信息服务 (IIS) 管理器。

  • 展开本地计算机节点,展开网站,右键单击相应的网站,指向管理网站,然后单击高级设置。

  • 在“高级设置”窗口中,展开“连接限制”,更改“连接超时”字段中的值,然后单击“确定”。

在此输入图像描述

应用程序池设置:

  • 打开 IIS。
  • 在左侧选择“应用程序池”
  • 在右侧,右键单击该应用程序池并选择高级设置。
  • 在高级设置中,增加“空闲超时(分钟)”。

在此输入图像描述

CGI 超时:

  • 在IIS中,双击CGI图标并增加“超时”。

在此输入图像描述