XIU2 / SNIProxy

🧷 自用的简单 SNIProxy(常用于网站负载均衡、基于域名(SNI)的端口转发等
GNU General Public License v3.0
351 stars 61 forks source link

接受连接请求时出错: accept tcp [::]:443: accept4: too many open files #1

Closed yanlc39 closed 1 year ago

yanlc39 commented 1 year ago

问题描述

在启动监听后,当有请求传入时会出现:

2023/06/08 10:41:05 接受连接请求时出错: accept tcp [::]:443: accept4: too many open files
2023/06/08 10:41:05 转发目标: steamcommunity.com:443
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x144b1c]

goroutine 18 [running]:
main.startSniProxy.func1({0x1be218?, 0x4000114180})
    C:/Github/SNIProxy/main.go:110 +0xcc
created by main.startSniProxy
    C:/Github/SNIProxy/main.go:103 +0x174```

软件版本

XIU2/SNIProxy v1.0.0

附加截图

No response

XIU2 commented 1 year ago

配置文件内容是什么? 复现步骤是什么?

yanlc39 commented 1 year ago

配置文件

listen_addr: :443
allow_all_hosts: true

接到请求后即复现

XIU2 commented 1 year ago

你是什么系统?你下载的是哪个架构位数的?(如 amd64)

我这边在 Linux、Windows 下测试均无法复现。

2023/06/08 17:59:27 调试模式: false
2023/06/08 17:59:27 前置代理: false
2023/06/08 17:59:27 任意域名: true
2023/06/08 17:59:27 开始监听: [::]:4433
2023/06/08 18:00:45 连接来自: 127.0.0.1:37500
2023/06/08 18:00:45 转发目标: steamcommunity.com:443

用 curl 模拟访问本地的 steamcommunity.com 均正常。

XIU2 commented 1 year ago

如果你是 Linux 系统,那么根据 accept tcp [::]:443: accept4: too many open files 报错信息来看,可能是系统文件句柄数耗尽(默认 1024),导致 SNIProxy 无法建立新连接,可以尝试增加一下系统最大句柄数(一般无论是做代理,还是做网站,这个操作都是必不可少的):

# 临时的(重启后会恢复为 1024)
ulimit -n 65535

# 永久的(重启后依然为 65535)
echo "* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535" >> /etc/security/limits.conf
yanlc39 commented 1 year ago

此程序运行在树莓派4b上,操作系统为arm64的debian,下载的release为arm64。 浏览器是另一台macOS arm64,通过修改hosts文件重定向到树莓派地址,访问后便可复现。