问题场景:
- nginx配置了404页面且指向一个使用了SSI include的页面(例如:404.shtml)
- 由于配置等原因,404.shtml中include的内容也不存在(也返回404)
造成结果:
request->404->redirect to 404.shtm->include a 404.shtml->include…
从而导致所有nginx的工作进程都被此请求的死循环block住
解决办法:
参考nginx SSI的文档,利用block语句和include语句中的stub属性:
stub — The name of the block to use as a default if the request is empty or returns an error.
首先在404.shtml中定义一个block:
然后在需要include的地方使用stub将include出错时的内容指向上面定义的block: