Skip to content

[Bug Fix] Fix redsocks startup failure causing upstream timeout (修复 redsocks 启动失败导致的上游超时) #93

Description

@liwei9745
# qwen2api 修复指南

---

### 问题描述

部署 qwen2api 后,在 WebUI 中测试账号时提示:

> ❌ 上游 Qwen 请求被网络超时、连接中断或 WAF 风控拦截

**实际原因**:并非网络或风控问题,而是容器内的 `redsocks` 透明代理根本没有启动成功,导致所有上游请求无法发出,从而被误报为"超时/拦截"。

具体有两个 bug:

1. **路径写死**:`entrypoint.sh` 中硬编码了 `/usr/local/bin/redsocks`,但实际安装路径通常是 `/usr/sbin/redsocks`,导致找不到可执行文件。
2. **配置语法过时**:脚本生成的配置文件使用了旧版字段 `redirect_iptables`,而当前 Debian/Ubuntu 系统的 redsocks 只识别 `redirector = iptables`,导致配置加载失败。

---

### 修复步骤

#### 修改 `qwen2api/entrypoint.sh`

**修复一:动态获取 redsocks 路径**

找到启动 redsocks 的代码,将:

```bash
/usr/local/bin/redsocks -c /tmp/redsocks.conf &

替换为:

REDSOCKS_BIN="$(command -v redsocks)"
if [ -z "$REDSOCKS_BIN" ]; then
    echo "ERROR: redsocks not found in PATH"
    exit 1
fi
"$REDSOCKS_BIN" -c /tmp/redsocks.conf &

修复二:更新 redsocks 配置语法

找到生成 /tmp/redsocks.conf 的代码,将 base { } 部分替换为:

base {
    log_debug = off;
    log_info = on;
    log = "stderr";
    daemon = off;
    redirector = iptables;
}

关键改动:

  • 删除 redirect_iptables = offredirect_ip6tables = off
  • 新增 redirector = iptables
  • 新增 log = "stderr" 方便排查
  • daemon = off(容器内不需要后台运行)

验证方法

# 1. 重新构建镜像
docker compose build qwen2api

# 2. 重启容器
docker compose up -d

# 3. 查看日志,确认 redsocks 正常启动
docker compose logs qwen2api

成功标志:日志中出现以下内容即表示修复成功:

redsocks running
iptables transparent proxy rules applied.
上游请求完成 status=200

此时再回到 WebUI 测试账号,应显示"创建上游会话成功",不再出现超时或风控拦截提示。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions