使用 Django Rest Framework、nginx 和 uwsgi 处理返回 403 错误的 PUT 请求
Handling PUT requests returning 403 errors with Django Rest Framework, nginx and uwsgi
我正在测试将使用 Django REST Framework 实现的访问受控 Web 服务移植到 nginx/uwsgi。当我测试 return 403 错误的 PUT 请求时,因为用户没有该端点的权限,我有时会在日志中收到这样的错误:
2016/02/09 06:42:05 [error] 574#0: *14978766 readv() failed (104: Connection reset by peer) while reading upstream, client: 10.10.10.10, server: test.whatever.com, request: "PUT /api/1.0/domains/name/Quest/page_content/name/Resit/ HTTP/1.1", upstream: "uwsgi://unix:///tmp/ipp_api_uwsgi.soc:", host: "test.whatever.com"
有一个few questions about this problem。建议的解决方案是:
- 或者确保您在
申请或
- 使用--post-buffering命令行选项
对于 uwsgi.
选项 1 似乎不是正确的方法 - DRF 的许可模块检查用户是否具有端点的访问权限,如果没有,则拒绝 PUT。 post 数据永远不会被访问,应该被转储。
选项 2 似乎可以解决问题,但我担心性能以及对其他成功 PUT 请求的影响。
选项 2 是我应该遵循的方法吗?还有其他建议吗?
post-buffering
会导致 uWSGI 消耗和缓冲主体请求,所以是的,它会影响性能,例如如果有人在未经许可的情况下发出大量请求。 uWSGI 将缓冲所有它们而不是仅仅拒绝。
但是您可以在 django 应用程序中处理它,使用适当的中间件,当没有执行任何操作的权限时,它只会将所有请求主体放入 /dev/null
。
我正在测试将使用 Django REST Framework 实现的访问受控 Web 服务移植到 nginx/uwsgi。当我测试 return 403 错误的 PUT 请求时,因为用户没有该端点的权限,我有时会在日志中收到这样的错误:
2016/02/09 06:42:05 [error] 574#0: *14978766 readv() failed (104: Connection reset by peer) while reading upstream, client: 10.10.10.10, server: test.whatever.com, request: "PUT /api/1.0/domains/name/Quest/page_content/name/Resit/ HTTP/1.1", upstream: "uwsgi://unix:///tmp/ipp_api_uwsgi.soc:", host: "test.whatever.com"
有一个few questions about this problem。建议的解决方案是:
- 或者确保您在 申请或
- 使用--post-buffering命令行选项 对于 uwsgi.
选项 1 似乎不是正确的方法 - DRF 的许可模块检查用户是否具有端点的访问权限,如果没有,则拒绝 PUT。 post 数据永远不会被访问,应该被转储。 选项 2 似乎可以解决问题,但我担心性能以及对其他成功 PUT 请求的影响。
选项 2 是我应该遵循的方法吗?还有其他建议吗?
post-buffering
会导致 uWSGI 消耗和缓冲主体请求,所以是的,它会影响性能,例如如果有人在未经许可的情况下发出大量请求。 uWSGI 将缓冲所有它们而不是仅仅拒绝。
但是您可以在 django 应用程序中处理它,使用适当的中间件,当没有执行任何操作的权限时,它只会将所有请求主体放入 /dev/null
。