你需要提前准备以下环境,所有安装步骤可直接执行:
sudo apt update && sudo apt install -y nginx,CentOS/RHEL执行sudo yum install -y nginx,Windows直接下载http://nginx.org/download/nginx-1.24.0.zip解压即可全局监听资源加载错误,自动替换为备用CDN资源或兜底占位资源,直接复制以下代码插入到项目入口HTML的head标签最顶部:
```javascript // 全局监听静态资源加载错误 window.addEventListener('error', (e) => { const target = e.target; // 处理JS加载失败 if (target.tagName === 'SCRIPT' && target.src) { // 替换为备用CDN地址 const backupSrc = target.src.replace('https://cdn-a.com', 'https://cdn-b.com'); if (target.src !== backupSrc) { const newScript = document.createElement('script'); newScript.src = backupSrc; document.body.appendChild(newScript); } } // 处理图片加载失败 if (target.tagName === 'IMG' && target.src) { target.src = 'https://cdn-b.com/default-placeholder.png'; } }, true); ```单页应用首先配置路由404兜底,避免用户访问不存在路径出现白屏,以Vue3为例:
```javascript // Vue3路由配置 const routes = [ // 其他业务路由 { path: '/:pathMatch(.)', name: 'NotFound', component: () => import('@/views/NotFound.vue') } ] ```Nginx层面配置单页应用路由兜底,避免刷新页面出现404,完整server配置如下:
```nginx server { listen 80; server_name your-domain.com; root /var/www/your-project/dist; index index.html; 单页应用路由兜底 location / { try_files $uri $uri/ /index.html; } } ```在Nginx的location代理块中添加以下配置,实现接口超时自动重试、错误节点自动剔除:
```nginx location /api/ { proxy_pass http://backend_server/; 错误自动转发到下一个节点 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 超时时间配置 proxy_connect_timeout 3s; proxy_send_timeout 5s; proxy_read_timeout 5s; 重试次数限制 proxy_next_upstream_tries 2; proxy_next_upstream_timeout 10s; } ```SpringBoot项目引入Resilience4j组件实现熔断重试,首先添加Maven依赖:
```xml
在application.yml中添加完整配置:
```yaml resilience4j: retry: instances: apiRetry: max-attempts: 2 wait-duration: 100ms retry-exceptions: - java.net.SocketTimeoutException - org.springframework.web.client.ResourceAccessException circuitbreaker: instances: apiCircuit: failure-rate-threshold: 50 sliding-window-size: 10 minimum-number-of-calls: 5 wait-duration-in-open-state: 10000 permitted-number-of-calls-in-half-open-state: 3 ```在需要容错的接口方法上添加注解,同时编写兜底方法:
```java // 原接口方法 @CircuitBreaker(name = "apiCircuit", fallbackMethod = "queryFallback") @Retry(name = "apiRetry") public List在axios响应拦截器中添加异常兜底逻辑,避免接口报错导致页面白屏:
```javascript axios.interceptors.response.use( res => res, err => { // 接口报错时返回兜底数据 return Promise.resolve({ data: { code: 0, data: [], msg: '服务异常,返回兜底数据' } }) } ) ```Nginx upstream配置被动健康检查,自动剔除故障节点,配置如下:
```nginx upstream backend_server { server 192.168.1.10:8080 max_fails=2 fail_timeout=10s; server 192.168.1.11:8080 max_fails=2 fail_timeout=10s; } ```max_fails=2代表10秒内失败2次就把节点剔除10秒,超时后自动尝试恢复流量。
Nginx配置全局降级开关,流量高峰或服务故障时一键切换到静态兜底页,配置如下:
```nginx http块中配置降级开关,1为开启降级,0为关闭 map $host $is_degrade { default 0; } server { 其他原有配置 if ($is_degrade = 1) { rewrite ^(.)$ /degrade.html break; } } ```提前在站点根目录上传预先写好的degrade.html作为兜底静态页即可。
nginx -s reload重载配置,刷新页面看是否直接返回degrade.html兜底页。易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。
Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图