CentOS
我正在和Nginx
(应用程序)上运行服务器nodejs
。
我的数据库连接过多mysql
,导致网站瘫痪。
我的iotop
日志显示,mysqld
虽然没有任何奇怪的请求发送到应用服务器(经 Nginx 日志和应用日志确认),但读取 IO 的速度太快(每秒千兆字节)。我连接了 Cloudflare,防火墙日志确认没有奇怪的 HTTP 请求活动。
网站 (https://info-kurs.com) 每天的访问量并不多(有很多白色爬虫,但我用 robots.txt 禁止它们)。
我mysqld.log
告诉我有很多错误,例如:
IP address 'ХХ.ХХ.ХХ.ХХ' could not be resolved: Name or service not known
然后我的应用程序出现以下错误:
MySQL Error 1040: Too Many Connections
我读过这篇文章MySQL 警告“无法解析 IP 地址”
它建议我添加skip_name_resolve
到my.cnf
文件。我添加了此指令。还要设置防火墙。我选择 Firewalld。
我的问题是- 如何首次设置 Firewalld 并且不丢失与服务器/站点的 ssh 和 http/https 连接,以及如何阻止除我的办公室 IP 之外的所有互联网的 mysql:3306 连接。我使用 Workbench 来访问我的数据库。
现在我知道:
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
但是如何阻止除一个 IP 之外的所有到 mysql 的连接?