使错误页面文件夹对外部请求提供 403 错误

使错误页面文件夹对外部请求提供 403 错误

我正在摆弄一台服务器,并将其中一个子域设置为不总是运行的服务的代理。server块如下所示:

server {
    server_name servlet.example.org;
    error_page 502 /error/down.html;

    location / {
        proxy_pass http://127.0.0.1:12510;
        proxy_redirect default;
        proxy_intercept_errors on;
    }

    location /error/ {
        root /path/to/servlet;
        autoindex off;
    }
}

/path/to/servlet/error/down.html当服务中断时,这可以满足任何请求,这很棒。

我的问题是,我想让任何外部请求都/error/返回 403 状态代码,并带有自己的自定义错误页面(例如forbidden.html,也可以在文件夹中找到)/error/。该internal指令听起来像是我想要的,但它返回 404。我不能只用将整个服务器上的 404 错误覆盖为 403 error_page,因为服务可能会返回自己的 404,我想保留它。

这可能吗?我该怎么做?我尝试过看似有意义的组合,internalerror_page毫无进展。

除此之外,我至少可以为任何在 中会显示 404 的网站提供 403 吗/error/?例如down.htmlforbidden.html会正常显示,但其他网站会显示 403 并显示forbidden.html

答案1

我无法让服务器在/error/外部将所有内容都设置为 403,但我设法做到了亚军:将所有其他不可用的内容都设置为 403。

我必须使用 rewrite 才能使其工作,因为如果没有它,对 nginx 的/error/单独请求将给出默认的 nginx 错误消息,而不是自定义的错误消息。我仍然无法弄清楚。

server {
    server_name servlet.example.org;
    error_page 502 /error/down.html;
    error_page 403 /error/forbidden.html; # other error_pages for the
    error_page 404 /error/notfound.html;  #  proxy's output
    # ...

    location / {
        proxy_pass http://127.0.0.1:12510;
        proxy_redirect default;
        proxy_intercept_errors on;
    }

    location = /error/ {           # did you request /error/ ?
        rewrite .* /error/x last;  # not anymore!
    }                              # we can also omit autoindex now

    location /error/ {
        root /path/to/servlet;
        error_page 404 =403 /error/forbidden.html;
    }
}

相关内容