今天闲来无事,想着重新搭建DVWA靶场耍耍,遂在宝塔面板上尝试搭建DVWA靶场,搭建过程中,发现访问php页面访问报错502状态码,于是就把排查解决过程中记录了下来,供大家参考。
一、宝塔面板搭建DVWA服务
1、创建站点
这里没有域名,“域名”参数使用IP加端口代替即可,如果没有对应的根目录,宝塔也会自动生成
注意:如果nginx服务的属组和属主是www,自己创建目录时务必将文件夹归属修改到www属组、属主下。
访问81端口测试,站点创建成功。
2、靶场文件上传到站点根目录
下载DWVA靶场压缩包并上传、解压到站点根目录
下载地址:https://github.com/digininja/DVWA
3、修改DVWA配置
(1)将config.inc.php.dist文件重命名为config.inc.php
(2)修改配置文件config.inc.php中的数据库连接信息;这里可以不需要单独创建数据库用户,可以等后面“初始化数据库”时自动创建。
(3)正常来说,到这里后,是可以正常访问DVWA靶场了,只需要在网页上操作“创建数据库”即可;但测试访问DVWA的PHP页面 返回502状态码。这里可能是php进程有问题,需要结合访问日志、错误日志进一步排查核实。
二、502状态码原因分析
1、php-fpm进程运行情况
查询PHP进程正常运行,排除php-fpm进程运行未启动的因素
2、服务器负载
也可能是服务器负载过高导致,但查询服务器近期负载很低;
3、Nginx日志
(1)查看nginx访问日志,status、upstream_status都是502,需要进一步查看错误日志
61.141.74.244 - - [19/Apr/2023:14:39:36 +0800] "GET /DVWA/index.php HTTP/1.1" 502 552 "-" "M
ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0
.0.0 Safari/537.36"
(2)错误日志显示是unix:/tmp/php-cgi-74.sock连接失败导致,即这里php-fpm的listen是通过unix sock方式连接
2023/04/19 14:39:36 [error] 19696#0: *119185 connect() to unix:/tmp/php-cgi-74.sock failed (111: Connection refused) while connecting to upstream, client: 192.168.8.88, server: 192.168.1.168, request: "GET /DVWA/index.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi-74.sock:", host: "192.168.1.168:81"
但查询nginx与php-fpm的交互路径是通过http方式
php-fpm.conf文件配置:
listen = 127.0.0.1:9000
3、fastcgi_pass为配置nginx与php-fpm的交互路径,一般有两种方式 :
(1)sock方式:fastcgi_pass unix:/tmp/php-cgi-74.sock;
(2)http方式:fastcgi_pass 127.0.0.1:9000;
任选其中一种即可,但必须和php-fpm的配置一致。
三、解决php-fpm 502状态码问题
1、创建对应的sock文件
创建sock文件,由于nginx、PHP服务使用的是www用户组、www用户权限,所以这里还需要赋予对应的属主和属组权限
touch /tmp/php-cgi-74.sock
chown www.www /tmp/php-cgi-74.sock
重启nginx、php进程,未解决;
2、修改nginx、php-fpm配置
(1)nginx配置文件中增加/修改以下配置:
location ~\.php$ {
root /www/wwwroot/dvwa_root;
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
(2)同时,修改php-fpm的配置文件php-fpm.conf,把nginx与php-fpm的交互路径从http方式改为sock方式,于是这里将“listen = 127.0.0.1:9000”改为
listen = /tmp/php-cgi-74.sock
listen.owner = www
listen.group = www
listen.mode = 0660
备注:php-fpm配置文件中不要使用注释符,否则启动时报错:
(3)至此,重启nginx、php-fpm进程后,DVWA靶场可以正常访问。
点击“Create/Reset Database”,等一两分钟创建完成后,即可正常访问DVWA靶场;默认密码是admin/password。
结后语:这里