Django POST请求和nginx问题

时间:2019-10-22 12:01:28

标签: django python-3.x nginx

我在Django应用程序前面有一个Nginx,并且在POST请求方面遇到了令人沮丧的问题。似乎有时POST请求的响应会“丢失”,并且不会返回到浏览器。但是,不会产生任何错误。我已经使用uwsgi和gunicorn进行了测试,并且可以在两个应用程序服务器下重现相同的错误。

我的nginx配置很简单:

upstream django {

    server myapp:8000; #
}

    server {
        listen 8000 default_server;

        location / {
          charset     utf-8;
          #include uwsgi_params;
          #uwsgi_pass django;
          proxy_pass http://django;
          client_max_body_size 512M;
#          add_header X-XSS-Protection "1; mode=block" always;
#          add_header X-Content-Type-Options "nosniff" always;
        }

        location /media/ {
          alias /uploads/;
          add_header X-XSS-Protection "1; mode=block" always;
          add_header X-Frame-Options "SAMEORIGIN" always;
          add_header X-Content-Type-Options "nosniff" always;
          add_header Cache-Control "no-store" always;

        }


        location /static/ {
          alias /static/;
          add_header X-XSS-Protection "1; mode=block" always;
          add_header X-Frame-Options "SAMEORIGIN" always;
          add_header X-Content-Type-Options "nosniff" always;
          expires 1y;
          add_header Cache-Control "max-age=31536000";
        }
    }

问题是,没有一致的方法来再现它。我有时可以通过在django-admin中更改密码来触发它。按下“更改密码”按钮更改密码后,我的浏览器一直在等待,而且似乎从未停止过,它一直在等待永远不会出现的回复...

但是,当我查看我的应用程序服务器日志时,请求已处理:

nginx_1     | 172.27.0.1 - - [22/Oct/2019:11:43:44 +0000] "GET /admin/password_change/ HTTP/1.1" 200 2812 "http://localhost:8000/admin/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" "-"
nginx_1     | 172.27.0.1 - - [22/Oct/2019:11:44:00 +0000] "POST /admin/password_change/ HTTP/1.1" 302 0 "http://localhost:8000/admin/password_change/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" "-"

似乎生成了302(可能只是标准的post-after-post),但它似乎从未到达我的浏览器。

这种情况仅在某些时候发生,这使得调试非常令人沮丧。 Chrome开发人员工具说,连接处于“挂起”状态,无论我等待多长时间,都不会收到任何回复。

以前有没有人经历过类似的事情?

某些版本信息:

django=2.2.6
uwsgi=2.0.18
gunicorn=19.9.0
nginx=1.16.1

此刻,当我直接对应用程序服务器执行POST时,我似乎无法重现该问题。

0 个答案:

没有答案