1

.ini ファイルは次のとおりです。

module=myapp.wsgi:application
master=True
pidfile=/tmp/project-master.pid
socket=127.0.0.1:8000
vacuum=True
max-requests=5000
daemonize=/home/mercier/django/site/wsgi.log
buffer-size=327680
processes=16
listen=500
timeout=10
post-buffering=1

nginx は uwsgi_pass ディレクティブを使用して接続を転送します。

django からの投稿データは見られません。request.POST は {} だけです。これは大きな問題です...どうすれば修正できますか? 投稿データは、開発中 (runserver) で見られました。

重要な注意: nginx と wsgi の両方が 200 (OK) で応答します。また、さまざまなポストバッファリングを設定しようとしましたが(あちこちにあります)、違いはありません...

ジャンゴ 1.4 uwsgi 1.9.15 nginx 1.2.1

EDIT3: webob を使用しようとしました: (load request.environ) POST/PUT 本文の送信中にクライアントが切断されました (さらに 39 バイトが予想されました)

今私は手動で試します: print request.environ['wsgi.input'].read(39) -> は空の行です...

Edit4:ネットで見つけたヒントを試したわけではないので、fcgiを試すか、実行サーバーに展開することを検討しています;(

Edit5: 関連する nginx.conf (有効なサイト) セクション:

server {

        listen   80; 

        server_name  localhost;

        access_log  /var/log/nginx/localhost.access.log;


        location / {
                root   /var/www;
                index  index.html index.htm;
                proxy_set_header X-FORWARDED-FOR $remote_addr;

                include uwsgi_params;
                uwsgi_pass_request_body on;
                uwsgi_pass_request_headers on;
                uwsgi_pass 127.0.0.1:8000;



        }

uwsgi_params:

uwsgi_param     QUERY_STRING            $query_string;
uwsgi_param     REQUEST_METHOD          $request_method;
uwsgi_param     CONTENT_TYPE            $content_type;
uwsgi_param     CONTENT_LENGTH          $content_length;

uwsgi_param     REQUEST_URI             $request_uri;
uwsgi_param     PATH_INFO               $document_uri;
uwsgi_param     DOCUMENT_ROOT           $document_root;
uwsgi_param     SERVER_PROTOCOL         $server_protocol;
uwsgi_param     UWSGI_SCHEME            $scheme;

uwsgi_param     REMOTE_ADDR             $remote_addr;
uwsgi_param     REMOTE_PORT             $remote_port;
uwsgi_param     SERVER_PORT             $server_port;
uwsgi_param     SERVER_NAME             $server_name;
uwsgi_param     DOCUMENT_BODY           $request_body;

編集6:

これは、私が使用しているアプリケーション (module=) です。

import os,sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site.settings")
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
"../../")))
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__),
"../")))

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
4

2 に答える 2

0

x=request.body

これは、wsgi によって実行されるすべての django アプリの最初の行になります。その後、POST DATA が機能します。Django は、後で使用する場合、リクエストの本文をすぐに読み取る必要があります。

ただし、まだこの問題があります: 無効な uwsgi リクエスト (現在の strsize: 16705)。スキップ。

なので、この設定でuwsgiを使うのは難しいです。そのような制限がないfcgiを使用してこれを解決しました。

理由: strsize は構成できません -- http://comments.gmane.org/gmane.comp.python.wsgi.uwsgi.general/5712

編集:ロベルトは正しいです-strsizeはリクエストの本文とは無関係であり、uwsgiでも機能します。旅行中や夜間などに問題をデバッグすることは、常に良い考えとは限りません;) しかし、Django はボディリクエストをすぐに読まなければならず、これは疑いの余地がありません。リクエストの本文は、他の処理を行う前に読み取る必要があります。

于 2013-08-30T22:39:06.920 に答える