树莓派下部署nginx出现502报错的故障排查及解决方案
日常使用环境下，树莓派没有显示器连接，想查看其使用状态，十分不便，故为其安装dashboard通过网页实时显示使用情况。在之前已经部署过LNMP环境，查看/var/www/目录下还有测试的php version页面，想必当初已经测试无误，但不知道为何现在访问会回显502 Bad Gateway错误，为此进行排查。502 Bad Gateway错误通常表示反向代理无法与上游服务器建立连接。常见原因包括但不限于：权限问题Nginx配置问题树莓派硬件资源问题端口冲突问题防火墙问题上游服务器问题权限问题问题描述：nginx用户（一般是www-data）没有权限访问上游服务。解决方法：sudo chown -R www-data:www-data /var/wwwNginx配置问题问题描述：nginx的服务器配置文件中的php-fpm相关设置错误。location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 一般错误的都是php-fpm的版本号 # 省略其他内容 }解决方法：location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 将此处的版本号改为实际版本号 # 省略其他内容 }树莓派硬件资源问题问题描述：树莓派的算力有限，内存可能出现不足的情况。使用命令查看内存使用情况：free -h解决方法：使用更新版本的树莓派或者添加swap。sudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile端口冲突问题问题描述：nginx使用的端口被其他服务占用，可以使用sudo netstat -tulnp命令查看。解决方法：修改nginx或其他服务端口即可。防火墙问题问题描述：安装的防火墙服务可能阻止nginx的端口被使用。解决方法：修改防火墙安全规则，放行相关端口。上游服务器问题问题描述：上游服务未运行或崩溃后未启动。解决方法：先检查服务状态，此处以php-fpm为例：sudo systemctl status php-fpm我的树莓派就是在此处出现了问题，在我输入完此命令后回显：Unit php-fpm.service could not be found.，说明php-fpm服务没安装或者出现了什么未知的错误导致原有的php-fpm服务失效了。如果没有回显Unit php-fpm.service could not be found.，则应该尝试重启服务：sudo systemctl restart php-fpm像我的树莓派这样回显Unit php-fpm.service could not be found.应该先尝试一下安装php-fpm。在网上其他人的方案中，他们按照php版本进行了区分：# PHP 7.x： sudo apt-get install php-fpm # PHP 8.x： sudo apt-get install php8.0-fpm # 或 php8.1-fpm、php8.2-fpm 等但是实测无需按照php进行区分，apt会按照已安装的php版本进行自动选择，除非你的树莓派中安装了多个版本的php。使用如下命令即可：sudo apt-get install php-fpm安装前可以先使用sudo apt-get update更新一下软件包源。安装后可以验证一下是否安装成功：sudo systemctl status phpx.x-fpm # 应使用实际安装版本替换x.x验证完毕后就可以启动和启用php-fpm了：# 启动服务 sudo systemctl start phpx.x-fpm # 设置开机自启动 sudo systemctl enable phpx.x-fpm启用完毕后，我们要检查一下nginx的服务器配置文件，确保指向正确的套接字，检查及修改方法如Nginx配置问题的解决方案，具体可以向上翻一下。Nginx具有多个配置文件，这些配置文件的位置分别是：主配置文件：/etc/nginx/nginx.conf可用站点配置文件：/etc/nginx/sites-available/已启用站点配置文件：/etc/nginx/sites-enabled/此处修改的配置文件应该为可用站点配置文件，默认的位置为：/etc/nginx/sites-available/default。如果创建了独立站点，后面的default就要修改为独立站点的名称。另外，如果使用TCP端口，即非Unix套接字，则要注释掉配置文件中的fastcgi_pass unix:/run/php/phpx.x-fpm.sock;，将下方的fastcgi_pass 127.0.0.1:9000;取消掉注释，如果下方没有该行注释，则手动写一下即可。当配置文件更新后，需要重启Nginx服务，使用如下命令：sudo systemctl restart nginx至此，Nginx出现502报错的问题已经被解决了，如果仍有问题，可以检查上游服务的配置或者查看Nginx日志来进行排查。不过，上述解决方案已经可以涵盖大多数情况。