nginx捕获服务器异常并通过location转发到备用服务器的解决方案和一般反向代理设置和JWT验证转发

需求:当主服务器出现故障,比如500、502、503、504、404等异常时自动启用备用服务器。

下面是server{}内部核心配置:

location /{
    #根据返回异常状态码转发到备用服务器
    error_page 404 500 502 503 504 = @backup;
}
#定义备用服务器
location @backup {
    #配置备用服务器,可以多台,用upstream xxx方式(下面举栗子)
    proxy_pass http://192.168.10.10:806;
}


多台备用服务器(负载均衡模式,参考https://blog.alipay168.cn/index/detail/item/484.html):

#配置分流模式
upstream myServer { 
  server localhost:805 ; 
  server localhost:806  weight=1 max_fails=2 fail_timeout=10; 
}

server
{
    listen 804;
    server_name abc.test;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/804;
    #异常时转发到其它服务器
    location /{      
      error_page 404 500 504 503 502 = @toBackupServer;
     }
     
    #转发到定义好的多台服务器(负载均衡配置)
    location @toBackupServer {
        proxy_pass http://myServer;
    }
    
 }


一般反向代理(兼容JWT验证):

比如要把/admin/转发到http://abc.com/admin/下面

#PROXY-START/admin/

location ^~ /admin/
{
    proxy_pass http://abc.com/admin/;
    proxy_set_header Host abc.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;
    #授权请求头转发,JWT认证需要
    proxy_set_header Authorization $http_authorization;
    # proxy_hide_header Upgrade;

    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache
    
    
    set $static_file6Q68vuT7 0;
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
    {
    	set $static_file6Q68vuT7 1;
    	expires 1m;
        }
    if ( $static_file6Q68vuT7 = 0 )
    {
    add_header Cache-Control no-cache;
    }
}

#PROXY-END/admin/


评论/留言