我正在测试将使用Django REST Framework实现的访问控制的Web服务移植到nginx / uwsgi。当我测试由于用户没有该端点的权限而返回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。建议的解决方案是:
选项1似乎不是正确的方法 - DRF的权限模块检查用户是否具有端点的访问权限,如果不这样做则拒绝PUT。永远不会访问帖子数据,只应该转储。 选项2似乎解决了问题,但我担心性能以及对其他成功的PUT请求的影响。
选项2是我应遵循的方法吗?还有其他建议吗?
答案 0 :(得分:1)
post-buffering
将导致uWSGI使用和缓冲正文请求,所以是的,它可能会影响性能,例如,如果有人在未经许可的情况下提出大量请求。 uWSGI将缓冲所有内容,而不仅仅是拒绝。
但你可以在django应用程序中处理它,使用适当的中间件,当没有权限执行任何操作时,它会将所有请求放入/dev/null
。