Fra*_*eil 41 nginx custom-error-pages
我有一个用Unicorn托管的Sinatra应用程序,在它前面有nginx.当Sinatra应用程序出错(返回500)时,我想提供一个静态页面,而不是默认的"内部服务器错误".我有以下nginx配置:
server {
  listen 80 default;
  server_name *.example.com;
  root /home/deploy/www-frontend/current/public;
  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_connect_timeout 5;
    proxy_read_timeout 240;
    proxy_pass http://127.0.0.1:4701/;
  }
  error_page 500 502 503 504 /50x.html;
}
error_page指令在那里,我有sudo'd作为www-data(Ubuntu)并验证我可以cat文件,因此它不是权限问题.使用上面的配置文件,并且service nginx reload,我在错误时收到的页面仍然是"内部服务器错误".
我的错误是什么?
Ste*_*lie 79
error_page处理由nginx生成的错误.默认情况下,无论http状态代码如何,nginx都将返回代理服务器返回的任何内容.
您正在寻找的是proxy_intercept_errors
该指令决定nginx是否会拦截HTTP状态代码为400或更高的响应.
默认情况下,所有响应都将按原样从代理服务器发送.
如果将此设置为on,则nginx将拦截由error_page指令显式处理的状态代码.具有与error_page指令不匹配的状态代码的响应将按原样从代理服务器发送.
Ale*_*xey 17
您可以为该位置设置proxy_intercept_errors
location /some/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_connect_timeout 5;
    proxy_read_timeout 240;
    proxy_pass http://127.0.0.1:4701/;
    proxy_intercept_errors on; # see http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
    error_page 400 500 404 ... other statuses ... =200 /your/path/for/custom/errors;
}
而你可以设置200其他状态你需要的
将FastCGI用作上游的人需要打开此参数
fastcgi_intercept_errors on;
对于我的PHP应用程序,我在上游配置块中使用它
 location ~ .php$ { ## Execute PHP scripts
    fastcgi_pass   php-upstream; 
    fastcgi_intercept_errors on;
    error_page 500 /500.html;
 }
| 归档时间: | 
 | 
| 查看次数: | 38310 次 | 
| 最近记录: |