繁体   English   中英

无法让 PHP 在 Nginx 上服务 -- 错误 502 网关错误

[英]Cannot get PHP to serve on Nginx -- Error 502 Bad Gateway

我对 nginx 还很陌生,并认为用它来服务 php 会非常简单,因为这种设置很常见,但它似乎比我预期的要复杂得多。

这是我的配置..

    server {
            listen 80;
            server_name domain.com www.domain.com;

            location / {
                    root   /srv/www/domain.com/public_html;
                    index index.php;
            }

    # serve static files directly
    #location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$
    #    access_log        off;
    #    expires           30d;

            location ~ [^/]\.php(/|$) {
                    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                    if (!-f $document_root$fastcgi_script_name) {
                            return 404;
                    }

                    fastcgi_pass /var/run/php5-fpm.sock;
                    fastcgi_index index.php;
                    include fastcgi_params;
            }
    }

如果我用“index.html”文件替换“index.php”,nginx 完美地提供了 html。 但是切换到 php 会导致 502 错误。

我看过指南建议修改从 iptables 到 php-fpm 到 php.ini 到 fast-cgi 到可用站点的任何内容..?

我不确定这些教程中的许多正在尝试做什么......现在我只想让我的 index.php 提供 phpinfo()。 下一步是什么?

是否有明确的指南来介绍可用于为 php 和 nginx 提供服务的各种选项?

您必须安装php-fpm并添加此部分: http//wiki.nginx.org/PHPFcgiExample

我假设您已成功安装php-fpm(FastCGI Process Manager)

转到php-fpm/php.ini

找到行cgi.fix_pathinfo=1 ,取消注释并将值1更改为0

cgi.fix_pathinfo=0

现在重启php-fpm服务。

通过您的终端

service php5-fpm restart (我不确定你的Linux发行版必须是一样的)

这可能是权限问题,您可以在日志文件中识别错误

  • 从日志中提取记录

    022/08/09 20:37:27 [crit] 3930#0: *17 connect() to unix:/var/run/php/php-fpm.sock 在连接到上游客户端时失败(13:权限被拒绝) :192.168.80.36,服务器:127.0.0.1,请求:“GET /info.php HTTP/1.1”,上游:“fastcgi://unix:/var/run/php/php-fpm.sock:”,主机: “127.0.0.1”

这提供了服务器冲突的线索,现在要验证运行哪个用户,我们需要检查 php-fpm 和 nginx 工作节点

  • 工作节点执行命令ps aux | grep 'nginx' ps aux | grep 'nginx'这将指示 nginx 工作节点的用户,在这种情况下它是nobody

    root@ubuntu:/var/nginx/html# ps aux | grep 'nginx'

  • 没有人3930 0.0 0.0 37636 3784? S 20:37 0:00 nginx:工作进程

  • 检查 php fpm 服务执行命令ps aux | grep 'php-fpm' ps aux | grep 'php-fpm'在我的情况下,它将指示用户为“www-data”

    root@ubuntu:/var/nginx/html# ps aux | grep 'php'

  • www-数据1320 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: 池 www

  • www-数据 1323 0.0 0.2 498796 11908? S 19:34 0:00 php-fpm: 池 www

为了解决这个冲突,在 nginx.conf 文件中,您必须在顶部定义用户派生为 www-data 即用户 www-data;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM