0

tornado 用のカスタム 404 ページを作成しようとして、nginx でデプロイしたいのですが、失敗しました。

これが私のdomain.confです(nginx.confに含まれています)

server {
    listen 80;
    server_name vm.tuzii.me;

    client_max_body_size 50M;

    location ^~ /app/static/ {
        root ~/dev_blog;
        if ($query_string) {
            expires max;
        }
    }

    location = /favicon.ico {
        rewrite (.*) /static/favicon.ico;
    }
    location = /robots.txt {
        rewrite (.*) /static/robots.txt;
    }

    error_page 404 /404.html;
    location /404.html {
        root /home/scenk;
        internal;
    }

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://frontends;
    }
}

しかし、nginxをリロードしても何も起こりません。nginxの前にトルネードが404エラーをキャッチしたようです。この問題を解決する方法がわかりません。

PS。nginxで404errorにしたいだけです。ただし、トルネード ソースの「write_error」は書き換えないでください。

Environment: Ubtuntu 12.04 Tornado2.4.1 runsite with supervisor by Nginx 4 process.
4

2 に答える 2

2

私は同じ問題に遭遇しましたが、実際に必要なのはこのセットです:

proxy_intercept_errors on;

nginx プロキシ モジュールのドキュメントから:

proxy_intercept_errors

構文: proxy_intercept_errors on | オフ

デフォルト: オフ

コンテキスト: http

このディレクティブは、nginx が 400 以上の HTTP ステータス コードで応答をインターセプトするかどうかを決定します。

デフォルトでは、すべての応答はプロキシ サーバーからそのまま送信されます。

これを on に設定すると、nginx は error_page ディレクティブによって明示的に処理されるステータス コードをインターセプトします。error_page ディレクティブに一致しないステータス コードを含む応答は、プロキシされたサーバーからそのまま送信されます。

于 2013-08-08T15:02:14.030 に答える
1

Finaillyはこの問題を解決します。なぜなら

proxy_pass_header Server;

したがって、実際のTornadoServerが送信されます。実サーバーを非表示にするには、変更するだけです

proxy_pass_header User-Agent;

それで全部です。

于 2013-01-25T02:47:49.393 に答える