You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit部署后遭无关请求泛滥:引发502错误及SSH连接故障

解决SvelteKit+PM2+Nginx部署后随机502及SSH无法连接问题

在Ubuntu LTS VPS上用PM2+Nginx部署SvelteKit应用后,出现随机502 Bad Gateway错误,且伴随SSH无法连接的情况。查看PM2错误日志发现大量非应用路由的404请求(如/lander/testsberv4_1703110539/、//web/wp-includes/wlwmanifest.xml等),这些请求多属于恶意扫描或爬虫,会耗尽服务器资源导致服务异常。以下是针对性解决方案:

1. Nginx层面拦截无效请求

直接在Nginx配置中拦截已知恶意扫描路径,不让请求到达SvelteKit应用,减少应用负载和日志生成。修改你的Nginx站点配置(通常在/etc/nginx/sites-available/目录下),在server块中添加:

# 拦截常见恶意扫描路径
location ~* (/lander/|/web/wp-includes/|/wp-admin/|/xmlrpc.php|/robots.txt|/wp-login.php) {
    return 444; # 直接关闭连接,节省服务器资源
}

# 仅转发合法路由到SvelteKit
location / {
    proxy_pass http://localhost:3000; # 替换为你的SvelteKit监听端口
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

修改后重载Nginx生效:

sudo nginx -s reload

2. 限制请求频率防止资源耗尽

用Nginx的limit_req模块限制单IP请求频率,避免爬虫或流量攻击打垮服务器。在/etc/nginx/nginx.conf的http块中添加:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

然后在站点配置的location /块中追加:

limit_req zone=mylimit burst=20 nodelay;

该配置限制每个IP每秒最多10次请求,允许20次突发请求,超过则直接拒绝,避免请求堆积。

3. 优化PM2日志管理

大量404日志会占用磁盘IO和空间,导致服务器性能下降。安装PM2日志轮转插件:

pm2 install pm2-logrotate
# 设置单日志文件最大10M,保留最近5份
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 5

4. 优化SvelteKit错误处理

在hooks.server.js中处理404请求,避免抛出SvelteKitError导致错误日志暴涨,直接返回404响应即可:

export async function handle({ event, resolve }) {
    try {
        const response = await resolve(event);
        if (response.status === 404) {
            return new Response('Not Found', { status: 404 });
        }
        return response;
    } catch (error) {
        // 仅记录应用内部错误,忽略404请求
        if (error.status !== 404) {
            console.error('App Error:', error);
            return new Response('Internal Server Error', { status: 500 });
        }
        return new Response('Not Found', { status: 404 });
    }
}

5. 利用Cloudflare拦截恶意流量

如果启用了Cloudflare,开启以下安全功能:

  • 将安全级别调至「中等」或以上,拦截可疑请求
  • 开启「Bot Fight Mode」,自动识别并拦截恶意爬虫
  • 配置防火墙规则,直接拦截包含恶意路径的请求(如/lander/、/wp-includes/等)

6. 监控服务器资源并设置自动重启

  • 用htop或top实时查看CPU、内存占用,定位资源消耗异常的进程
  • 设置PM2自动重启策略,当应用内存占用过高时自动重启:
pm2 start your-app.js --max-memory-restart 1G # 内存超过1G时触发重启
  • 启用PM2实时监控:pm2 monit,随时查看应用状态

内容的提问来源于stack exchange,提问作者sezaemrekonuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:07:30