V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
teemoer
V2EX  ›  NGINX

nginx 502 问题, 能监控下来转发到其他页面吗?

  •  
  •   teemoer · 2016-09-22 17:51:25 +08:00 · 4387 次点击
    这是一个创建于 3016 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题: 当 访问 www.java.sx/love 这个 url 时 服务器出问题 这时候 nginx 502 了,

    能不能 把请求又转发到 www.java.sx/fvcklove 呢?? 也就是说 www.java.sx/fvcklove 其实是备用的

    如何配置,感谢您的帮助。 呼啦啦,黑魔法 --》

    11 条回复    2016-09-23 04:35:49 +08:00
    nilai
        1
    nilai  
       2016-09-22 17:55:59 +08:00
    没问题, 如果整体的话, 直接给 nginx 设置一个 error_page 502 页面就可以了。
    如果针对某个 URL 的话,也很简单 用 openresty 很简单就实现了。
    在 header_filter 或者 body_filter 阶段
    if ngx.status == 502 then
    xxxxxxx
    end
    lhbc
        2
    lhbc  
       2016-09-22 18:03:21 +08:00 via Android
    teemoer
        3
    teemoer  
    OP
       2016-09-22 18:05:14 +08:00
    @nilai 如果是针对 某一个 url 呢?
    teemoer
        4
    teemoer  
    OP
       2016-09-22 18:05:39 +08:00
    @lhbc 感谢回复 请问如果 是 针对某一个 指定的 url 呢
    pubby
        5
    pubby  
       2016-09-22 18:16:19 +08:00
    nginx 后面还有 proxy/fastcgi 到后端吗?
    teemoer
        6
    teemoer  
    OP
       2016-09-22 18:18:41 +08:00
    @pubby ![]( )
    hl
        7
    hl  
       2016-09-22 18:23:13 +08:00
    使用 upstream ,然后 proxy 反向代理时指定特定 http code 发送到 upstream 内的其他服务器
    例如 proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    salmon5
        8
    salmon5  
       2016-09-22 19:35:54 +08:00
    如果和请求页是不同的页面,用 error_page ,
    如果和请求页相同的其他服务器,用 proxy_next_upstream ,但是注意,动态请求有坑, nginx 超时时间是 60 秒。
    salmon5
        9
    salmon5  
       2016-09-22 19:37:01 +08:00
    proxy_next_upstream 可能会使同一个动态请求,请求 1 次以上。
    pubby
        10
    pubby  
       2016-09-22 21:42:44 +08:00
    server {
    listen 80;
    server www.java.sx;

    location / {
    proxy_pass http://backend:8888;
    ....


    proxy_intercept_errors on;
    error_page 502 = @do502;
    }

    location @do502 {

    # 保持网址不变
    rewrite /love /fvcklove break;

    # 或者跳转到 fvcklove ,那么 part1,part2 部分就不再需要
    rewrite /love /fvcklove redirect;

    # {{ part1
    proxy_pass http://localhost;
    proxy_set_header Host do502-for.www.java.sx;
    proxy_redirect off;
    # }}
    }
    }

    # {{ part2
    server {
    listen 80;
    server do502-for.www.java.sx;

    location / {
    return 502; # 默认返回 502
    }

    # 特殊页
    location = /fvcklove {
    proxy_pass http://backend:8888;
    proxy_redirect off;
    ....

    # 这里不能再捕获 502
    }

    }

    # }}
    bobylive
        11
    bobylive  
       2016-09-23 04:35:49 +08:00 via Android
    error_page 502 /xxxx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3001 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:56 · PVG 21:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.