Nginx error_page指令:我可以传递一个参数吗?

时间:2016-12-25 10:14:52

标签: nginx parameter-passing config

我想在 Nginx 配置文件中使用' error_page' 指令时传递参数,如下所示。

我已经' err.html' 使用JavaScript处理响应状态代码。但是下面根本不起作用。

error_page     
400 401 402 403 404 500 502 503 504 = /err.html?$status;

当我使用' error_page'时,是否有其他方法可以传递响应状态代码(或其他参数)指令?

2 个答案:

答案 0 :(得分:1)

(我重写了这个答案)

问题是由于我对内部重定向和外部重定向的混淆造成的。以下效果很好。 (假设'err.php'正确处理查询字符串)

error_page  400 401 402 403 404 500 502 503 504 /err.php?$status;

如果我希望客户端JavaScript处理响应状态代码(通过查询字符串传递),我应该尝试另一种方式,如Satys所说。我可以找到一种方法。

error_page  400 402 403 404 500 502 503 504 @err;

location @err {
    rewrite ^.*$ /err.html?$status redirect;
}

感谢您的建议,Satys。

答案 1 :(得分:0)

我认为这是一个错误的概念。如果出错,使用error_page,nginx不会返回url,而是执行内部重定向,并发送和备用响应。

为了实现这一目标,目前我可以想到两种方式,

    对于不同的错误代码,
  1. multiple error_pages ,并对其进行预编码 javascript到那些页面。

    error_page 404 err404.html;
    
    error_page 403 err403.html;
    ...
    
  2. 这似乎有点冗长。

    1. 内部重定向到某个自定义位置阻止并添加标头 在回应中。
    2. error_page 404 405 ... / custom_error $ status;

      location ~ /custom_error(.*) {
         add_header Error-Code $1;
         try_files /err.html.html 404;
      }
      

      P.S。请检查语法错误,上面的代码未经过测试。