我使用nginx作为使用gunicorn的Django应用程序的代理服务器。 Django应用绑定到http://127.0.0.1:8000。这是来自etc / nginx / sites-enabled / parkitbackend的我的nginx设置:
server {
server_name AA.BB.CC.DD;
access_log off;
location /static/ {
autoindex on;
alias /home/zihe/parkitbackend/parkitbackend/common-static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
}
我正在使用python请求模块:
requests.post("http://AA.BB.CC.DD/dashboard/checkin/", data=unicode(json.dumps(payload), "utf8"))
将JSON对象发布到名为dashboard的django应用程序中,我在dashboard / views.py中有一个名为 checkin 的函数来处理JSON对象。
我没有收到运行JSON发布脚本的任何错误。但是,Nginx似乎无法将请求传递给在127.0.0.1:8000绑定的gunicorn。我应该怎么做才能使用Nginx将JSON传递给我的django应用程序?谢谢!
附加说明: 我非常确定JSON发布代码和我的django应用程序正常工作,因为我通过将Django app绑定到http://AA.BB.CC.DD:8000来测试它并在python中运行此代码:
requests.post("http://AA.BB.CC.DD:8000/dashboard/checkin/", data=unicode(json.dumps(payload), "utf8"))
我的django app按预期收到了JSON。
答案 0 :(得分:0)
我检查了位于/ var / log / nginx /的error.log。事实证明我发送的JSON太大而且发出了这个错误:
[error] 3450#0: *9 client intended to send too large body: 1243811 bytes, client: 127.0.0.1, server: _, request: "POST /dashboard/checkin/ HTTP/1.1", host: "127.0.0.1"
阅读此链接后:http://gunicorn-docs.readthedocs.org/en/19.3/deploy.html#nginx-configuration
我缩小了JSON的大小并修改了etc / nginx / sites-enabled / parkitbackend,如下所示:
upstream app_server {
server 127.0.0.1:8000;
}
server {
listen AA.BB.CC.DD:80;
server_name = _;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
location /static/ {
autoindex on;
alias /home/username/parkitbackend/parkitbackend/common-static/;
}
}
并在/etc/nginx/nginx.conf中替换了这一行:
include /etc/nginx/sites-enabled/*;
用这个:
include /etc/nginx/sites-enabled/parkitbackend;
问题解决了。