• 005_常见的502错误


    常见的502错误

    1. 配置错误

    因为nginx找不到php-fpm了,所以报错,一般是fastcgi_pass后面的路径配置错误了,后面可以是socket或者是ip:port;

    2. 资源耗尽

    lnmp架构在处理php时,nginx直接调取后端的php-fpm服务,如果nginx的请求量偏高,我们又没有给php-fpm配置足够的子进程,那么php-fpm就会资源耗尽,一旦资源耗尽nginx找不到php-fpm就会出现502错误;

    解决方案:
    去调整php-fpm.conf中的pm.max_children数值,使其增加,但是也不能无限增加,毕竟资源有限,一般4G内存机器如果跑php-fpm和nginx,不跑mysql可以设置为150,8G为300以此类推;

    3. 其他原因

    除了上面的两种错误还有其他的原因,一般很少有,我们可以借助nginx的错误日志来进行排查:

    cat /usr/local/nginx/logs/nginx_error.log

    我们也可以给日志定义级别:vim/usr/local/nginx/conf/nginx.conf 找到error_log,默认是crit最严谨的就行,也可以改成debug显示的信息最全面,但是很容易撑爆我们的磁盘。

    3.1 修改 nginx 的配置文件

    首先我们需要让浏览器进行访问

    vim/usr/local/nginx/conf/vhosts/111.conf

    server
    {
       listen 80;
       server_name www.111.com;       // 域名地址
       index index.html index.htm index.php;
       root /data/www/;
       location ~ .php$ {
           include fastcgi_params;
           fastcgi_pass unix:/tmp/www.sock;  // 修改sock
          #fastcgi_pass 127.0.0.1:9000;
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
        }
    }
    

    3.2 检查语法是否正常

    /usr/local/nginx/sbin/nginx -t

    3.3 重新加载配置文件

    /usr/local/nginx/sbin/nginx-s reload

    /etc/init.d/nginx reload

    3.4 检查 nginx 是哪个用户跑的

    ps aux |grep nginx

    3.5 编辑 php-fpm 文件

    我们要在这个php-fpm文件里面设置nginx的用户主,跟组这样才不会显示502

    vim/usr/local/php/etc/php-fpm.conf

    [global]
    pid = /usr/local/php/var/run/php-fpm.pid
    error_log =/usr/local/php/var/log/php-fpm.log
    [www]
    listen = /tmp/www.sock
    user = php-fpm
    group = php-fpm
    listen.owner = nobody    //定义属主
    listen.group = nobody    //定义属组
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 20
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
    pm.max_requests = 500
    rlimit_files = 1024
    

    3.6 重启 php-fpm

    /etc/init.d/php-fpm restart

    补充: 近期很多同学遇到的问题
    这种情况下,使用的是socket,版本高于5.4(含5.4) 默认监听的socket文件权限是所有者只读,属组和其他用户没有任何权限。所以,nginx的启动用户(咱们配置的是nobody)就没有办法去读这个socket文件,最终导致502,这个问题可以在nginx的错误日志中发现。解决办法很简单,上面给出的配置文件中就有避免这个问题的配置。

    listen.owner = nobody    //定义属主
    listen.group = nobody    //定义属组
    

    这两个配置就是定义socket的属主和属组是谁。除了这个还有一种方法

    listen.mode = 666

    这样nobody也可以有读取权限了。

  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/cy-8593/p/12333631.html
Copyright © 2020-2023  润新知