我的编程空间,编程开发者的网络收藏夹
学习永远不晚

网站请求异常502 php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

网站请求异常502 php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

记一次并发上限及被dos攻击的处理

线上业务再次出现问题,nginx的错误日志频繁出现:connect() to unix:/dpan/web/sites/xxx.com/php-pool/php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

Backlog排查

先查看目前对应的域名限制数:

shell> ss -lnRecv-Q Send-Q    Local Address:Port      Peer Address:Port0      511                   *:80                   *:*0      128           127.0.0.1:9000                 *:*

注:Recv-Q如果接近于Send-Q,说明当前域名请求阻塞严重,可以把排查重点关注在此域名上。

1. 优先查看linux系统net.core.somaxconn值:

sysctl net.core.somaxconn

调高该值,立即修改:

sysctl -w net.core.somaxconn=65535

或修改配置文件:

echo "net.core.somaxconn=65536" >> /etc/sysctl.confsysctl -p

重启相关服务,比如Redis、MySQL、PHP-fpm。

建议同时调高以下值,打开/etc/sysctl.conf

net.core.somaxconn = 20480net.core.netdev_max_backlog = 20480net.ipv4.tcp_max_syn_backlog = 20480net.ipv4.tcp_max_tw_buckets = 800000

修改后须重启服务器生效。

2. 修改nginx配置文件

科普:

  • worker_processes:设置与cpu核数一致或高版本nginx设置auto
  • worker_connections:单个⼯作进程可以允许同时建⽴外部连接的数量数字越⼤,能同时处理的连接越多
1.connections不是随便设置的,⽽是与两个指标有重要关联,⼀是内存,⼆是操作系统级别的“进程最⼤可打开⽂件数”。2.内存:每个连接数分别对应⼀个read_event、⼀个write_event事件,⼀个连接数⼤概占⽤232字节,2个事件总占⽤96字节,那么⼀个连接总共占⽤328字节,通过数学公式可以算出100000个连接数⼤概会占⽤ 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占⽤的nginx。3.进程最⼤可打开⽂件数:进程最⼤可打开⽂件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,nginx提供了worker_rlimit_nofile指令,这是除了ulimit的⼀种设置可⽤的描述符的⽅式。 该指令与使⽤ulimit对⽤户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;设置ulimits:ulimit -SHn 65535通过 ps -elf | grep nginx 找到 nginx 的worker进程ID通过 cat /proc/31613/limits 查看,其中2291是worker进程ID,请注意其中的Max open files
  • backlog值调高:
server {    listen 80 backlog=20480;    listen 443 ssl backlog=20480;...}

修改后重启Nginx生效。

3. PHP配置

修改php-fpm.conf

# 默认值为-1,说是随系统配置,其实还是只有128listen.backlog = 8129

修改后重启PHP生效。

如果backlog值已经很高,但网站依然报以上错误且网站502错误,可以排除是系统配置问题了,可能是瞬时并发太高服务器配置跟不上或被ddos攻击(特别是服务器下行带宽被占满情况下)。

可以继续排查端口、连接数,打开nginx的请求日志,从请求日志中筛选访问异常(频繁)的IP,将其加入黑名单处理。

端口排查

查看占用端口进程

netstat -lntup | grep 9000

查看TCP连接数统计 指定端口 连接数

netstat -nat|grep -i "80"|wc -lnetstat -nat|grep -i "443"|wc -l

查看所有连接请求

netstat -tn 2>/dev/null

统计httpd协议连接数

ps -ef|grep httpd|wc -l

统计已连接上的,状态为“established

netstat -na|grep ESTABLISHED|wc -l

查出哪个IP地址连接最多

netstat -tun|awk '{print $5}'|cut -d : -f1|sort|uniq -c|sort -n -r

访问量统计

根据访问ip统计uv

awk '{print $1}'  access.log|sort | uniq -c |wc -l

统计访问url统计pv

awk '{print $7}' access.log|wc -l

查询访问最频繁的url

awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more

查询访问最频繁的ip

awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more

根据时间段统计查看日志

cat  access.log| sed -n '/14/mar/2015:21/,/14/mar/2015:22/p'|more

流量统计

使用 iftop 工具排查

  • 安装 服务器内部安装 iftop 流量监控工具:
yum install iftop -y
  • 查看 服务器外网带宽被占满时,如果通过远程无法登陆,可进入到服务器内部,运行下面命令查看流量占用情况:
iftop -i eth0 -P
  • :-P 参数会将请求服务的端口显示出来,也就是说是通过服务器哪个端口建立的连接,看内网流量执行 iftop -i eth0 -P 命令。

  • 如上面示例图,通过分析发现最耗流量的是服务器上 53139 端口和 115.205.150.235 地址建立的连接,产生了大量入网流量。执行 netstat 命令反查 53139 端口对应进程。

netstat -tunlp |grep 53139
  • 3、最终定位出来是服务器上 vsftpd 服务产生大量流量,这时可以通过停止服务或使用iptables服务来对指定地址进行处理,如屏蔽 IP 地址,限速,以保证服务器带宽能够正常使用。

使用 nethogs 进行排查

  • 安装 服务器内部安装 nethogs 流量监控工具:
yum install nethogs -y
  • 查看 通过 nethogs 工具来查看某一网卡上进程级流量信息,若未安装可以通过 yum、apt-get 等方式安装。

  • 假定当前 eth1 网卡跑满,则执行命令 nethogs eth0,在右边的红框中可以看到每个进程的网络带宽情况,左边红框显示了进程对应的 PID,在此可以确定到底是什么进程占用了系统的带宽。

nethogs eth0
  • 如果确定是恶意程序,可以通过 kill -TERM 来终止程序。

  • 如是 Web 服务程序,则可以使用 iftop 等工具来查询具体 IP 来源,然后分析 Web 访问日志是否为正常流量,日志分析也可以使用 logwatch 或 awstats 等工具进行分析,若确定是正常的流量,则可以考虑升级服务器的带宽。

禁用IP

通过系统防火墙禁用

查看防火墙状态

sudo service iptables status

启动防火墙

sudo service iptables start

发现报错

iptables: No config file.

执行下面的命令

sudo iptables -P OUTPUT ACCEPTsudo service iptables save

然后再启动防火墙

sudo service iptables start

禁用IP

sudo iptables -I INPUT -s 对方IP -j DROP-I insert 的意思-s source 的意思

删除禁用IP

sudo iptables -D INPUT -s 对方IP -j DROP-D delete 的意思

————————————————
原文链接:https://blog.csdn.net/JustDI0209/article/details/123841187

通过nginx deny命令禁用

主配置文件禁用

拒绝某个IP:

server {    listen       80;    server_name  localhost;    allow all;    deny 123.123.123.123;    error_page   500 502 503 504  /50x.html;}

如果你需要对整个IP段设置不允许访问,可以这么写:

deny 123.0.0.0/8;    // 封 123.0.0.1~123.255.255.254 这个段的ipdeny 123.123.0.0/16;   // 封 123.123.0.1~123.123.255.254 这个段的ipdeny 123.123.123.0/24;   // 封 123.123.123.1~123.123.123.254 这个段的ipdeny all;  // 封所有ip
修改网站配置文件.htaccess

除了修改Nginx配置文件之外,还可以通过修改网站配置文件.htaccess来限制某IP(段)访问,方法如下。

将以下内容保存为.htaccess文件,上传至网站根目录。如果原来已经存在.htaccess文件的,将以下内容加到该文件开头。

rder allow,denyallow from alldeny from 123.123.123.123

如果要限制一个IP段,比如要限制123.123.123.*这个C段,则输入:

Order allow,denyallow from alldeny from 123.123.123

以上内容表示拒绝123.123.123开头的所有IP,其他IP允许。

如果要限制多个IP段,中间用空格隔开,如:

Order allow,denyallow from alldeny from 111.111.111 111.222.222 111.333.333

说明,该配置不用重启web服务器,修改立即生效。

————————————————
原文链接:https://blog.csdn.net/linfeng_meng/article/details/126709728

来源地址:https://blog.csdn.net/nbaqq2010/article/details/128115158

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

网站请求异常502 php-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录