nginx和php72:脚本未运行;也许找不到?

时间:2019-02-01 07:38:42

标签: php nginx freebsd

我正在重新安装FreeBSD(最新的稳定生产版本),并从软件包中安装了nginx和php72。我的第一个困难是,网络上的大多数信息都与从源代码构建这些应用程序有关,并且程序包将.conf文件和其他内容放置在不同的目录中。我想我是在 Nginx HTTP Server-第四版和一些浏览器的帮助下得出的。 Nginx可以很好地提供静态文件。但是PHP无法正常工作。每次尝试运行包含php-info()的简短脚本都会导致:

  

发生错误。抱歉,您正在寻找的页面当前   不可用。请稍后再试。如果您是系统   此资源的管理员,则应检查错误日志中是否存在   细节。忠实的,nginx。

几年前,我发现了这个Stack Exchange问​​题: File Not Found when running PHP with Nginx我尝试了问题中给出的几种解决方案,包括67票赞成和10票赞成的解决方案。您可以在下面的nginx.conf文件中看到它们。这是我的nginx.conf文件:

  user  nginx;
    worker_processes auto;
    worker_priority 10;

    # This default error log path is compiled-in to make sure configuration parsing
    # errors are logged somewhere, especially during unattended boot when stderr
    # isn't normally logged anywhere. This path will be touched on every nginx
    # start regardless of error log location configured here. See
    # https://trac.nginx.org/nginx/ticket/147 for more info. 
    #
    error_log  /var/log/nginx/error.log;
    #

    pid        logs/nginx.pid;


    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;

        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';

        #access_log  logs/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        #keepalive_timeout  0;
        keepalive_timeout  65;

        #gzip  on;

        server {
            server_name  JRWFreeBSD;
            listen       80;
            root /usr/local/www/nginx/documents;
            index index.html index.htm index.php
            #charset koi8-r;

            #access_log  logs/host.access.log  main;


            error_page  404              /404.html;

            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/local/www/nginx-dist;
            }

            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            location ~* \.php$ {
            root /usr/local/www/nginx/documents;
                fastcgi_pass   127.0.0.1:9000;
            #   fastcgi_index  index.php;
                include        fastcgi_params;

            #   fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx/documents$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;

            }
        }
    }
    enter code here

(此nginx.config文件基于nginx附带的默认值。我只包括了我实际使用的服务器块,而没有注释掉的块。) 文件文件夹中的所有文件均具有用户nginx / nginx组作为所有者,权限为755。Nginx加载时不会报告任何配置文件(包括php-fpm的配置文件)中的错误。由于我已将nginx正确配置为提供静态文件,因此日志文件中没有任何显示。 我已经验证了根路径-/ usr / local / www / nginx / documents-是正确的。 Nginx从那里提供静态文件。 以下名为phpinfo.php的脚本在文档中。

  <?php
    // Show all information, defaults to INFO_ALL
    phpinfo();
    ?>

php-我给我的结果包括以下几行:

 Environment
    OLDPWD => /usr/local/etc/nginx
    --snip--
    PWD => /usr/local/www/nginx/documents

    PHP Variables
    $_SERVER['OLDPWD'] => /usr/local/etc/nginx
    --snip--
    $_SERVER['PWD'] => /usr/local/www/nginx/documents

命令行php脚本有效。

一切看起来都不错,但是当nginx服务时php脚本无法运行。

1 个答案:

答案 0 :(得分:1)

解决了! sockstat告诉我,没有人在听127.0.0.1,而当我在寻找一种解决方法时,我发现当nginx将脚本发送到该IP地址时,php-fpm72在/ var / run / php72-fpm上进行监听.sock

我对nginx.conf进行了以下更改:

 fastcgi_pass   unix:/var/run/php72-fpm.sock;
 #fastcgi_pass   127.0.0.1:9000;

PHP脚本现在可以工作。从FreeBSD pkg系统安装nginx会安装默认的nginx.conf脚本,该脚本与我从pkg安装php-fpm72时创建的默认.conf脚本不兼容。不过,我还有一个问题:我应该向pkg维护者提交错误吗?

编辑添加:谢谢哈斯女士让我重新检查使我走上正确路径的日志。此外,Gelov先生,我用重点突出的版本替换了我的几行内容。