NGINX - 如何重定向504网关超时

时间:2018-04-25 16:09:17

标签: nginx url-rewriting timeout

我正在使用NGINX作为glassfish的反向代理。当glassfish返回50x错误时,我能够识别并重定向到cdn中的另一个资源。

但如果它只是超时,NGINX将通过504网关超时响应用户,而不是通过重写重定向到CDN的良好资源。

在这种情况下,我想做同样的事情,如果NGINX超时,我想重定向到另一个URL,就像我在@ redir_404中一样。

我怎样才能做到这一点?

谢谢。

server {
listen *:80;
ssl off;

access_log  /var/log/nginx/access-.log;
error_log   /var/log/nginx/error-.log;

client_max_body_size 60m;

location @redir_404 {
    rewrite /ad/(.*?)(\?.*)?$ $scheme://cdn.company.com/ad/$1/index.html break;
    rewrite /tag(.*?)$  $scheme://cdn.company.com/tag/pixel.png break;
}

location / {
    proxy_intercept_errors on;
    set_real_ip_from 192.23.45.16;
    real_ip_recursive on;
    real_ip_header X-Forwarded-For;

    proxy_pass http://localhost:8080;

    # Force timeouts if one of the backend is dead #
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;    

    # Set headers #
    proxy_set_header    Host        $host;
    proxy_set_header    X-Real-IP   $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header        X-Umotion-Ip    $remote_addr;
    proxy_set_header        User-Agent    $http_user_agent;

    add_header      Front-End-Https on; 

    # By default we don't want to redirect #
    proxy_redirect off;

    # Force cache-control to no-cache for /tag and /ad
    location ~ ^/(tag|ad) {
        proxy_pass http://localhost:8080;
        add_header Cache-Control "private, no-cache, no-store, must-revalidate, proxy-revalidate";
    }

    error_page 403 404 405 500 501 502 503 504 = @redir_404;
}

}

1 个答案:

答案 0 :(得分:0)

添加error_page位置以在服务器块中重定向。

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
        root /usr/share/nginx/html;
        internal;
  } 

我们可以根据需要自定义错误页面(/50x.html是cutom设计页面)