nginx и php72: скрипты не работают;может не найден? - PullRequest
0 голосов
/ 01 февраля 2019

Я запускаю свежую установку FreeBSD (последняя стабильная производственная версия) с nginx и php72, установленными из пакетов.Моя первая трудность заключается в том, что большая часть информации в Интернете относится к созданию этих приложений из исходного кода, а пакеты помещают файлы .conf и другие объекты в разные каталоги.Я думаю, что я понял это с помощью Nginx HTTP Server - Четвертое издание и некоторый просмотр.Nginx отлично справляется со статическими файлами.Но PHP не работает.Каждая попытка запустить короткий скрипт, содержащий php-info (), приводит к:

Произошла ошибка.Извините, страница, которую вы ищете, в данный момент недоступна.Пожалуйста, попробуйте позже.Если вы являетесь системным администратором этого ресурса, вам следует проверить подробности в журнале ошибок.С уважением, nginx.

Я нашел этот вопрос Stack Exchange несколько лет назад: Файл не найден при запуске PHP с 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 / group 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 командной строки работают.

Все выглядит правильно, но сценарии php не работаютзапускать, когда им служит nginx.

1 Ответ

0 голосов
/ 02 февраля 2019

Решено!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-скрипты теперь работают.При установке nginx из системы FreeBSD pkg был установлен скрипт nginx.conf по умолчанию, который не был совместим со скриптом .conf по умолчанию, созданным при установке php-fpm72 из pkg.У меня все еще есть один вопрос: должен ли я сообщать об ошибке в сопровождающие pkg?

Отредактировано, чтобы добавить: Спасибо, госпожа Хассе, за то, что заставили меня пересмотреть журналы, которые привели меня к правильному пути.Кроме того, г-н Гелов, я заменил несколько строк, которые у меня были, вашей более сфокусированной версией.

...