0

我试图为龙卷风制作自定义 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 之前捕获了 404error。我不知道要解决这个问题。

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 开启;

来自nginx 代理模块文档

proxy_intercept_errors

语法:proxy_intercept_errors on | 离开

默认值:关闭

上下文:http

该指令决定 nginx 是否会拦截 HTTP 状态代码为 400 或更高的响应。

默认情况下,所有响应都将从代理服务器按原样发送。

如果您将其设置为 on,则 nginx 将拦截由 error_page 指令显式处理的状态代码。状态码与 error_page 指令不匹配的响应将从代理服务器按原样发送。

于 2013-08-08T15:02:14.030 回答
1

最终解决这个问题。因为

proxy_pass_header Server;

所以发送了真正的 TornadoServer。要隐藏真实服务器,只需更改

proxy_pass_header User-Agent;

就这样。

于 2013-01-25T02:47:49.393 回答