11

nginx への fastcgi インターフェイスを使用して Django サイトを実行しています。ただし、一部のページは切り捨てられて表示されます (つまり、ページ ソースがタグの途中で停止することがあります)。これを修正するにはどうすればよいですか (追加情報が必要な場合はお知らせください。投稿します)

詳細:

私は flup を使用しており、次のコマンドで fastcgi サーバーを生成しています。

python ./manage.py runfcgi umask=000 maxchildren=5 maxspare=1 minspare=0 method=prefork socket=/path/to/runfiles/django.sock pidfile=/path/to/runfiles/django.pid

nginx の設定は次のとおりです。

# search and replace this: {project_location}
pid /path/to/runfiles/nginx.pid;
worker_processes  2;
error_log /path/to/runfiles/error_log;
events {
    worker_connections  1024;
    use epoll;
}
http {
    # default nginx location
    include        /etc/nginx/mime.types;
    default_type    application/octet-stream;
    log_format main
        '$remote_addr - $remote_user [$time_local] '
            '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    connection_pool_size        256;
    client_header_buffer_size    1k;
    large_client_header_buffers    4 2k;
    request_pool_size        4k;
    output_buffers   4 32k;
    postpone_output  1460;
    sendfile        on;
    tcp_nopush             on;
    keepalive_timeout      75 20;
    tcp_nodelay            on;
    client_max_body_size       10m;
    client_body_buffer_size    256k;
    proxy_connect_timeout      90;
    proxy_send_timeout         90;
    proxy_read_timeout         90;
    client_body_temp_path      /path/to/runfiles/client_body_temp;
    proxy_temp_path            /path/to/runfiles/proxy_temp;
    fastcgi_temp_path            /path/to/runfiles/fastcgi_temp;
    gzip on;
    gzip_min_length  1100;
    gzip_buffers     4 32k;
    gzip_types       text/plain text/html application/x-javascript text/xml text/css;
    ignore_invalid_headers    on;
    server {
        listen 80;
        server_name alpha2.sonyalabs.com;
        index index.html;
        root   /path/to/django-root/static;
        # static resources
        location ~* ^/static/.*$
        {
        root   /path/to/django-root;
                expires 30d;
                break;
        }
        location / {
            # host and port to fastcgi server
            fastcgi_pass unix:/path/to/runfiles/django.sock;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_param REQUEST_METHOD $request_method;
            fastcgi_param QUERY_STRING $query_string;
            fastcgi_param CONTENT_TYPE $content_type;
            fastcgi_param CONTENT_LENGTH $content_length;
            fastcgi_pass_header Authorization;
            fastcgi_intercept_errors off;
        }
        location /403.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /401.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location /404.html {
                root   /usr/local/nginx;
                access_log   off;
        }
        location = /_.gif {
                    empty_gif;
                access_log   off;
        }
            access_log    /path/to/runfiles/localhost.access_log main;
            error_log    /path/to/runfiles/localhost.error_log;
        }
}
4

6 に答える 6

8

nginxでNagiosを実行するのとまったく同じ問題がありました。回答をグーグルで検索しているときにあなたの質問に出くわし、「許可が拒否されました」関連の回答を読んで、それが私を襲いました(そしておそらくあなたを助けるでしょう):

  • Nginx error.log が報告していました:

    2011/03/07 11:36:02 [クリティカル] 30977#0: *225952 open() "/var/lib/nginx/fastcgi/2/65/0000002652" 失敗 (13: 許可が拒否されました)

  • # chown -R www-data:www-data /var/lib/nginx/fastcgi を実行しました

  • 修理済み !(そして、間接的な助けに感謝します)

于 2011-03-07T10:54:59.563 に答える
6

ファイルへの書き込みエラーの「アクセス許可が拒否されました」のエラー ログを確認してください.../nginx/tmp/...。Nginx は、一時スペースが必要でない限り問題なく動作します。これは通常、32K 境界で発生します。これらのエラーが見つかった場合は、nginx を実行するユーザーが tmp ディレクトリに書き込み可能であることを確認してください。

于 2010-12-23T04:37:11.697 に答える
3

どのfastcgiインターフェースをどのように使用していますか。羽ばたきですか?はいの場合は、サーバーを生成する方法と、サーバーをnginxにフックする方法を貼り付けます。その情報がなければ、何がうまくいかないかを推測しているだけです。

考えられる問題:

  • nginxはバグがあります。少なくともlighttpdには恐ろしいfastcgiのバグがありますが、nginxにもいくつかあるのではないかと思います:)
  • Djangoは、適切にキャッチされていない内部システムのトレースバックで停止し、クライアントからは見えないfastcgiサーバーを閉じます。そのような状況では、fastcgiサーバーアプリケーション呼び出しをラップし、それを試行/例外して例外を出力します。

しかし、サーバーログと構成は素晴らしいでしょう。

于 2008-10-01T21:21:52.243 に答える
2

「gzip_buffers」を上げてみると役立つ場合があります。

ここを参照してください: http://blog.leetsoft.com/2007/7/25/nginx-gzip-ssl

于 2009-03-23T20:00:22.547 に答える
2

これは FastCGI のせいではありません。

nginx/gunicorn を使用してまったく同じ問題に遭遇しました。応答サイズを 32k 未満に減らすと (spacelessテンプレートでタグを使用する特定のケースで)、解決しました。

dwc が言うように、これはおそらく nginx がアドレス空間を使用する方法によるハード リミットです。

于 2011-05-17T15:17:05.467 に答える
0

私は自分のウェブホスト(Webfaction)とローカルのUbuntu開発サーバーの両方でこれと非常によく似た構成を実行していますが、問題はありません。これを引き起こしているのは、タイムアウトまたはフルバッファだと思います。

nginxエラーログの出力を投稿できますか?また、どのバージョンのnginxを使用していますか?

補足として、 fastcgiプロセスが何をしているのかを知るためにdjango-loggingを見る価値があるかもしれません。

于 2009-07-23T16:11:04.953 に答える