首页
留言
导航
统计
Search
1
追番推荐!免费看动漫的网站 - 支持在线观看和磁力下载
2,508 阅读
2
推荐31个docker应用,每一个都很实用
1,311 阅读
3
PVE自动启动 虚拟机 | 容器 顺序设置及参数说明
931 阅读
4
一条命令,永久激活!Office 2024!
618 阅读
5
优选 Cloudflare 官方 / 中转 IP
489 阅读
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
登录
Search
标签搜索
Java
小程序
Redis
SpringBoot
docker
Typecho
Cloudflare
docker部署
虚拟机
WordPress
群晖
uni-app
CentOS
Vue
Java类库
Linux命令
防火墙配置
Mysql
脚本
Nginx
微醺
累计撰写
264
篇文章
累计收到
11
条评论
首页
栏目
默认分类
服务器
宝塔
VPS
Docker
OpenWRT
Nginx
群晖
前端编程
Vue
React
Angular
NodeJS
uni-app
后端编程
Java
Python
SpringBoot
SpringCloud
流程引擎
检索引擎
Linux
CentOS
Ubuntu
Debian
数据库
Redis
MySQL
Oracle
虚拟机
VMware
VirtualBox
PVE
Hyper-V
计算机
网络技术
网站源码
主题模板
页面
留言
导航
统计
搜索到
4
篇与
的结果
2025-07-05
用虚拟IP扩容服务器端口池
最近遇到一个棘手的问题:服务器的 WebSocket 服务在高并发场景下,客户端连接数达到一万多时,服务器的端口资源被耗尽了。导致后面的任何请求都没响应。通过 netstat 查看连接情况,发现所有连接的本地端口都是从 32768 开始的,即使我已经将系统的端口范围设置为 1024-65535[root@server ~]# cat /proc/sys/net/ipv4/ip_local_port_range 1024 65535但实际分配的端口还是从32768开始,导致高位端口很快被耗尽,新连接无法建立。问题分析经过一番调研,发现这个问题在 Linux 系统中很常见。虽然设置了 ip_local_port_range 为 1024-65535,但实际上如下:glibc的默认行为:很多Linux发行版的glibc硬编码了临时端口分配的起始值为32768内核版本限制:老版本内核(如3.10)没有 ip_unprivileged_port_start 参数历史遗留问题:这是Linux系统的"正常"行为,不是配置错误我的服务器环境: 内核:3.10.0-1127.19.1.el7.x86_64glibc:2.17系统:CentOS 7.6解决方案探索方案一:升级系统(不推荐)升级glibc和内核到新版本可以支持更灵活的端口分配,但在生产环境中风险极高,容易导致系统崩溃。方案二:虚拟IP扩容(推荐)通过在同一台服务器上添加多个虚拟IP,每个IP都拥有独立的端口池,从而成倍扩容端口资源。虚拟IP方案实施第一步:查看网络环境首先确认服务器的网卡和IP配置:[root@server ~]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:16:3e:1f:ee:09 brd ff:ff:ff:ff:ff:ff inet 1.2.3.17/20 brd 11.22.33.255 scope global dynamic eth0可以看到主IP是 1.2.3.17/20 ,子网掩码是 /20。第二步:添加虚拟IP根据主IP的网段,添加几个虚拟IP:ip addr add 1.2.3.100/20 dev eth0 ip addr add 1.2.3.101/20 dev eth0 ip addr add 1.2.3.102/20 dev eth0这里的ip后三位可以随便写。ip个数最好是100个以内,多了会影响性能。验证添加成功:ip addr show eth0显示出刚才添加的ip就是没问题的第三步:配置Nginx负载均衡修改Nginx配置,将流量分发到不同的虚拟IP:upstream websocket_backend { server 1.2.3.100:38088; server 1.2.3.101:38088; server 1.2.3.102:38088; } server { listen 80; server_name xx.com; location /请求上下文 { proxy_pass http://websocket_backend/请求上下文; proxy_redirect default; proxy_pass_header Server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; } }第四步:重启服务重启 WebSocket服务端 和 Nginx ,让配置生效:nginx -t nginx -s reload效果验证查看连接分布使用 ss 命令查看连接是否被正确分发到不同虚拟IP:ss -tnp | grep 38088输出显示连接确实被分发到了不同IP:CLOSE-WAIT 1 0 1.2.3.100:38088 169.24.13.2:36294 CLOSE-WAIT 1 0 1.2.3.101:38088 169.24.13.2:57430 CLOSE-WAIT 1 0 1.2.3.102:38088 169.24.13.2:37558这里的169.24.13.2不用管,这是我的nginx用的docker镜像的原因端口资源扩容效果之前:所有连接都占用 1.2.3.17 的端口池(32768~65535)现在:连接分散到3个虚拟IP,每个IP都有独立的端口池效果:端口资源扩容3倍,极大缓解端口耗尽问题注意事项1. 子网掩码的确定添加虚拟IP时,子网掩码必须和主IP一致。查看方法很简单:ip addr show eth0看输出中的 inet 1.2.3.17/20,直接使用 /20 即可。2. 虚拟IP的持久化临时添加的虚拟IP重启后会失效,需要写入启动脚本:# 编辑 /etc/rc.local ip addr add 1.2.3.100/20 dev eth0 ip addr add 1.2.3.101/20 dev eth0 ip addr add 1.2.3.102/20 dev eth0 # 赋予执行权限 chmod +x /etc/rc.d/rc.local3. 网络架构要求Nginx 和 WebSocket服务端 必须在同一台服务器虚拟IP必须在同一网段内,不能和其他机器冲突如果是云服务器,可能需要先在控制台申请辅助私网IP总结通过 虚拟IP + Nginx 负载均衡的方案,成功将端口资源扩容了 3倍,有效解决了高并发 WebSocket 场景下的端口耗尽问题。这个方案的优势:实施简单:只需添加虚拟IP和配置Nginx风险较低:不需要升级系统内核效果显著:端口资源成倍扩容扩展性好:可以根据需要继续添加虚拟IP对于高并发WebSocket、短连接等场景,这是一个非常实用的解决方案。
2025年07月05日
32 阅读
0 评论
0 点赞
2025-03-11
CentOS 7 ens33获取不到ip地址和启动网卡报错的解决方法
当我们启动虚拟机输入 ifconfig 查看 IP 地址时出现下图这样的情况,发现没有 ens33 移动到 /etc/sysconfig/network-scripts 编辑 ifcfg-ens33cd /etc/sysconfig/network-scripts vim ifcfg-ens33将 ONBOOT=NO 改成 ONBOOT=yes 输入 i 进行编辑;将最后 ONBOOT=no 改为 yes 即可;单击 esc 键,然后输入 :wq 保存退出。这样就开启了 ens33 ;接着重启网络服务就可以看到 ip 地址。重启网络服务service network restart 出现下图表示已经重启成功输入 ifconfig ens33 有了 ip 地址。出现 异常# 关闭NetworkManager服务 systemctl stop NetworkManager systemctl restart network.service service network restart # 问题解决
2025年03月11日
63 阅读
0 评论
0 点赞
2024-06-06
Linux SSH Access denied(拒绝访问)解决方案
新安装的 CentOS 7 使用 SSH 连接出现 Access denied,记录一下这个坑。详细问题如下(见图):解决方案查了下资料,Linux 系统默认就是禁止远程登录的。那就打开权限就行了。因为需要修改系统设置,普通用户会出现没有权限,所以在超级管理员下操作!编辑配置文件:vim /etc/ssh/sshd_config修改 PermitRootLogin 为 yes退出编辑:按下 'Esc' 键,输入 ':wq',回车保存即可。重启 SSH:systemctl restart sshd大功告成,可以使用 ssh 链接了~~
2024年06月06日
205 阅读
0 评论
0 点赞
2023-02-11
Centos7防火墙配置详细
一、条件防火墙是开启的 systemctl start firewalld 1、查看防火墙的配置 firewall-cmd --state firewall-cmd --list-all 2、开放80端口 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload #重新加载防火墙配置才会起作用 3、移除以上规则 firewall-cmd --permanent --remove-port=80/tcp firewall-cmd --reload 4、放通某个端口段 firewall-cmd --permanent --zone=public --add-port=1000-2000/tcp firewall-cmd --reload 5、放通某个IP访问,默认允许 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 accept' firewall-cmd --reload 6、禁止某个IP访问 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.42 drop' firewall-cmd --reload 7、放通某个IP访问某个端口 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 port protocol=tcp port=6379 accept' firewall-cmd --reload 8、移除以上规则 firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.169" port port="6379" protocol="tcp" accept' firewall-cmd --reload 9、放通某个IP段访问 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 accept' 以下有图片效果 以下有图片效果 以下有图片效果 一、条件防火墙是开启的 systemctl start firewalld 1、查看防火墙的配置 firewall-cmd --state 2、开放80端口 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --reload #重新加载防火墙配置才会起作用 3、移除以上规则 firewall-cmd --permanent --remove-port=80/tcp firewall-cmd --reload 4、放通某个端口段 firewall-cmd --permanent --zone=public --add-port=1000-2000/tcp firewall-cmd --reload 5、放通某个IP访问,默认允许 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 accept' firewall-cmd --reload 6、禁止某个IP访问 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.42 drop' firewall-cmd --reload 7、放通某个IP访问某个端口 firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.169 port protocol=tcp port=6379 accept' firewall-cmd --reload #禁止指定IP访问本机8080端口 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="8080" reject' 8、移除以上规则 firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="192.168.1.169" port port="6379" protocol="tcp" accept' firewall-cmd --reload
2023年02月11日
54 阅读
0 评论
0 点赞