【问题标题】:Mysterious Django API Behavior In Production生产中的神秘 Django API 行为
【发布时间】:2021-03-08 19:06:32
【问题描述】:

长期阅读,但新加入社区。我有一个神秘的问题想寻求帮助。由于这是当前在生产中运行的代码的一部分,我需要编辑部分信息,并在需要时提供信息。如果需要,我还将制作一个新的示例代码,以确保我们都可以测试并指导我正确地解决问题。

目前,有一个 Web 应用程序 (django/wagtail/coderedcms) 后端需要转换为移动应用程序。为了允许移动应用程序与后端服务器通信,我使用 Django-rest-framework 实现了一个 API 端点。为了对用户进行身份验证,我已经使用 Django-rest-simplejwt 实现了一个简单的身份验证端点。这部分工作正常。该应用的要求之一是用户必须能够通过移动应用查看/更新他们的个人资料。

当在我的本地主机中的开发服务器中工作时,行为符合预期,每个用户都可以使用应用程序登录,后端将发送回一个令牌,随后将使用令牌访问应用程序的各个部分。

当在生产中实现相同的代码库时(当前处于 UAT 阶段)发现一个行为,如果多个用户同时登录,服务器将只返回第一个请求配置文件的用户的配置文件.
含义:
用户 A 已登录 ....
用户 B 已登录 ....
用户 B 请求查看他的个人资料(显示个人资料 B)
用户 A 请求查看他的个人资料(显示个人资料 B)

这让我感到困惑,因为在本地主机上进行测试时,行为是:
用户 A 已登录 ....
用户 B 已登录 ....
用户 B 请求查看他的个人资料(显示个人资料 B)
用户 A 请求查看他的个人资料(显示个人资料 A)

我不知道这是由于 docker、nginx 还是 django 生产设置造成的。
但是,现在我只能缩小到 Nginx 和 docker,因为我在 localhost 中使用相同的配置,除了 debug=true 状态。

任何帮助或指针都会很有用。

提前感谢所有阅读并回答这个愚蠢但神秘的问题的人

此致
阿什拉夫

编辑

回复奥古尔坎·奥尔古纳

来自生产服务器的 Postman 在标头中使用此响应

allow →GET, POST, OPTIONS
cache-control →max-age=300
connection →keep-alive
content-encoding →gzip
content-type →application/json
date →Wed, 25 Nov 2020 20:59:03 GMT
expires →Wed, 25 Nov 2020 21:03:30 GMT
server →nginx/1.17.4
strict-transport-security →max-age=31536000
transfer-encoding →chunked
vary →Accept, Origin, Cookie
x-cdn →Incapsula
x-content-type-options →nosniff
x-frame-options →ALLOWALL
x-iinfo →4-22327133-22328885 NNYN CT(2 2 0) RT(1606337880159 62932) q(0 0 0 -1) r(1 1) U16
x-wagtail-cache →hit

对于本地主机

allow →POST, GET, OPTIONS
content-length →204
content-type →application/json
date →Wed, 25 Nov 2020 20:57:45 GMT
server →WSGIServer/0.2 CPython/3.8.5
vary →Accept, Origin
x-content-type-options →nosniff
x-frame-options →DENY

【问题讨论】:

  • 听起来像是缓存问题。
  • 谢谢,我也这么认为

标签: django docker nginx django-rest-framework django-rest-framework-simplejwt


【解决方案1】:

我猜是因为没有太多关于为什么会导致错误的信息。如果您在生产中没有运行单独的缓存系统(例如 Redis),则此错误可能是由客户端引起的。您是否使用 Postman 之类的工具尝试过相同的场景?

【讨论】:

  • 请参考我对邮递员原帖的编辑,我也不使用单独的缓存系统
  • 你确定你有 Nginx 在本地运行吗? WSGI 在发送到 localhost 的请求中显示为 Web 服务器。如果你的 Nginx 中有任何缓存设置,它可能是相关的。如果你不是用 Nginx 一一管理项目中的位置,我建议你在 Django 而不是 Nginx 中设置公共和私有缓存设置。 Django cache framework
猜你喜欢
  • 2015-12-26
  • 2018-05-15
  • 2011-05-06
  • 1970-01-01
  • 2014-06-21
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多