NextChat
NextChat copied to clipboard
[Bug] proxychains4在mac下dev无法代理
Describe the bug mac环境dev调试,mac版proxychains4代理,proxychains启动时正常挂载,但是实际接口并未走代理通道。 编译docker没问题
To Reproduce Steps to reproduce the behavior:
- 配置proxychains.conf
strict_chain proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] socks5 127.0.0.1 51837 - 调试启动 proxychains4 -f ./proxychains.conf npm run dev
[proxychains] config file found: ./proxychains.conf [proxychains] preloading /usr/local/Cellar/proxychains-ng/4.16/lib/libproxychains4.dylib - 没有代理成功的 [proxychains] 日志,clash并未收到请求
[Proxy] v1/chat/completions [Base Url] https://api.openai.com [Chat Stream] [TypeError: fetch failed] { cause: [ConnectTimeoutError: Connect Timeout Error] { name: 'ConnectTimeoutError', code: 'UND_ERR_CONNECT_TIMEOUT', message: 'Connect Timeout Error' }
Desktop (please complete the following information):
- OS: MacOS 13.3.1 (22E261)
- Node v18.14.0
- proxychains-ng 4.16 install with brew
我建议你可以先用其他的 openai-proxy 项目,在 cloudflare 上搭建一个 openai 代理,然后通过修改 BASE_URL 的方式去访问,这样要比本地的梯子稳很多。
- 我在MAC本地运行也有同样的问题,proxychains也是同样的配置,一样的错误(Proxychains验证curl是正常可用的)。 本地希望网络走NextWeb Client -> MAC Local SOCKS5 -> OpenAI的链路,对React和NextJs不熟悉,不清楚这里网络转发是如何走的?
- 通过公司网络(公司网已经直接支持访问Google等),没有任何代理配置,直接在webstorm里面运行
yarn run dev,通过访问127.0.0.1:3000端口则可以正常访问和使用Chat,不清楚这里网络有什么差异?
@lupguo 由于要兼容 vercel edge function 运行时,无法在 server function 内部使用 proxy,所以只能用 proxychains 曲线救国,可以等待 standalone 编译支持后,这个问题就不存在了 #1000
@EngsShi @Yidadaa
proxychains.conf配置信息
这里特别注意本地端口不走代理
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
# 本地端口不走代理,不然会静态web页会访问失败
localnet 127.0.0.0/255.0.0.0
localnet ::1/128
[ProxyList]
socks5 127.0.0.1 10553
node执行的应用走proxychains
本地执行yarn run dev实际是执行了node ./node_modules/.bin/next dev
$ which node
/opt/homebrew/bin/node
# 通过ps看到node执行信息
$ pstree -p 6102
-+= 00001 root /sbin/launchd
\-+= 05973 lupingguo /Applications/WebStorm.app/Contents/MacOS/webstorm
\-+= 06102 lupingguo /usr/local/bin/zsh --login -i
\-+= 12366 lupingguo node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/.bin/next dev
\-+- 12367 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js
|--- 12368 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js
\--- 12369 lupingguo /opt/homebrew/Cellar/node/19.7.0/bin/node /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/node_modules/next/dist/compiled/jest-worker/processChild.js
# 实际是node要走proxychains4,并非yarn,所以这里proxychains4执行为以下内容:
$ proxychains4 node ./node_modules/.bin/next dev
[proxychains] config file found: /private/data/projects/subprojects/chatgpts/Yidadaa/ChatGPT-Next-Web/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.16-git-13-g133e06b
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
[proxychains] DLL init: proxychains-ng 4.16-git-13-g133e06b
...
输入框发出提问请求后,可以通过Log看到代理链路请求信息:
....
[Proxy] v1/chat/completions
[Base Url] https://api.openai.com
[proxychains] Strict chain ... 127.0.0.1:10553 ... api.openai.com:443 ... OK
到处,本地访问localhost:3000是通过本地IP端口访问,node的web应用是通过proxychains配置的socks5代理访问,从而可以正常使用openai了!
最后,注意因为有MAC的SIP机制存在,会导致一些MAC自带二进制bin执行文件失效
参考:https://github.com/rofl0r/proxychains-ng/issues/78
合入 #1000