3

竜巻で作業しているときに、設定の下で、コマンドラインからアプリケーションを実行しているときに正常に動作する gzip=True 機能を発見しました。

define("port", default=settings.LISTEN_PORT, help="run on the given port", type=int)
define("debug", default=True, help="run in debug mode", type=bool)
define("dont_optimize_static_content", default=False,
       help="Don't combine static resources", type=bool)
define("dont_embed_static_url", default=False,
       help="Don't put embed the static URL in static_url()", type=bool)

tornado.options.parse_command_line()
tornado.options.options['log_file_prefix'].set('/var/log/tmp.log')

app_settings = dict(
    template_path=os.path.join(os.path.dirname(__file__), "templates"),
    static_path=os.path.join(os.path.dirname(__file__), "static"),
    xsrf_cookies=False,
    gzip=True,
    debug=True,
)

ただし、tornado サーバーからの Supervisord/nginx 応答を使用したアプリのデプロイは gzip されません。

[program:app-8001]
command=python /var/app/server/app.py --port=8001 --logging=debug ----dont_optimize_static_content=False
directory=/var/app/server/
stderr_logfile = /var/log/app-stderr.log
stderr_logfile_backups=10
stdout_logfile = /var/log/app-stdout.log
stdout_logfile_backups=10
process_name=%(program_name)s
loglevel=debug

私は何が間違っているのですか?

4

1 に答える 1

1

デフォルトでは、nginx はリクエストを Tornado にプロキシするときに HTTP/1.1 リクエストを実行しません (またはそれについては何でも)。Tornado では、gzip されたコンテンツを返すために HTTP/1.1 のサポートが必要です。

web.py の重要なコード フラグメント

def __init__(self, request):
    self._gzipping = request.supports_http_1_1() and \
        "gzip" in request.headers.get("Accept-Encoding", "")

以下を構成ファイルに追加することでオーバーライドできるはずですが、私のインスタンスでは機能しません。

proxy_http_version 1.1;
于 2013-02-26T05:50:24.187 に答える