nginx не обслуживает php, но скачивает - PullRequest
0 голосов
/ 13 сентября 2018

Я нашел похожий вопрос здесь: Nginx служит для загрузки файлов .php вместо их выполнения Но, к сожалению, ответ там мне не помогает. Итак, моя история.

Что работает

Когда я перехожу к myipaddress / index.html, страница приветствия nginx отображается правильно. Когда я перехожу к myipaddress / widgets / index.html, страница приветствия nginx отображается правильно. NB. Я немного изменил этот index.html из приведенного выше, поэтому приветственное сообщение отличается. Таким образом, я докажу себе, что он действительно находит две разные структуры файла / папки index.html.

Что не работает

Когда я перехожу к myipaddress / widgets / info.php, вместо того, чтобы показывать детали команды phpinfo (), она загружает файл php.

Установленные пакеты

Я использую alpinelinux. Установлены следующие пакеты:

lab-1:/var/www/localhost/htdocs# cat /etc/apk/world
curl
nginx
php7-common
php7-fpm

Версия Nginx

lab-1:/etc/php7# nginx -v
nginx version: nginx/1.14.0

гс-статус

lab-1:/var/www/localhost/htdocs# rc-status
Dynamic Runlevel: manual
 nginx        [  started  ]
 php-fpm7     [  started  ]

Структура папок

lab-1:/var/www/localhost/htdocs# ls -lah
total 16
drwxr-xr-x    3 www      www         4.0K Sep 13 14:22 .
drwxr-xr-x    3 www      www         4.0K Sep 13 13:17 ..
-rw-r--r--    1 www      www          624 Sep 12 20:35 index.html
drwxr-xr-x    2 www      www         4.0K Sep 13 17:40 widgets


lab-1:/var/www/localhost/htdocs# ls -lah widgets/
total 16
drwxr-xr-x    2 www      www         4.0K Sep 13 17:40 .
drwxr-xr-x    3 www      www         4.0K Sep 13 14:22 ..
-rw-r--r--    1 root     root         632 Sep 13 14:23 index.html
-rwxr-xr-x    1 www      www           27 Sep 13 15:45 info.php

Файлы конфигурации

netstat для подтверждения запуска php fpm

lab-1:/etc/php7# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      4268/php-fpm.conf)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4323/nginx.conf
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      346/sshd
tcp        0      0 :::80                   :::*                    LISTEN      4323/nginx.conf
tcp        0      0 :::22                   :::*                    LISTEN      346/sshd

пс -А

4268 root      0:00 {php-fpm7} php-fpm: master process (/etc/php7/php-fpm.conf)
4275 nginx     0:00 {php-fpm7} php-fpm: pool www
4276 nginx     0:00 {php-fpm7} php-fpm: pool www
4323 root      0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
4324 nginx     0:00 nginx: worker process
4325 nginx     0:00 nginx: worker process
4326 nginx     0:00 nginx: worker process
4328 nginx     0:00 nginx: worker process
4329 nginx     0:00 nginx: worker process
4330 nginx     0:00 nginx: worker process
4331 nginx     0:00 nginx: worker process
4332 nginx     0:00 nginx: worker process

Комментарии

Я пытался убедиться, что владельцем прослушивания и группой прослушивания является тот же пользователь, с которым работает nginx, то есть «nginx». Также я знаю, что использование "127.0.0.1:9000" не так хорошо, как использование сокета Unix. Но сейчас я пытаюсь использовать параметры установки по умолчанию для php7-fpm. (По правде говоря, я тоже не знаю, как это изменить)

Вопросы

  1. Вы видите, где я ошибся?
  2. Доказывает ли тот факт, что он загружает php-файл, что он находит директиву location в нужном conf-файле? поэтому проблема ограничена содержимым моей директивы location {} в файле widgets.conf?
  3. Как только я исправлю проблему с php, если в моей настройке есть действительно огромные ошибки, которые вы можете увидеть, можете ли вы указать на них? Благодарю.

РЕДАКТИРОВАТЬ 1

Я установил curl на свою машину и попытался сделать это:

lab-1:/etc/php7# curl http://10.11.11.1111/widgets/info.php
<?php

     phpinfo();

?>

против этого:

lab-1:/etc/php7# curl http://widgets/index.html
curl: (6) Could not resolve host: widgets

Но я не совсем знаю, как это исправить. Я хочу, чтобы система всегда требовала указывать IP-адрес, а затем имя папки / приложения.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Основываясь на подсказке, что widgets.conf, возможно, вообще не читается), я просто добавил еще один раздел о местоположении в default.conf на данный момент.И это решило проблему с интерпретацией файлов php.

Мне нужно будет прочитать, как решить эту проблему в будущих случаях.В идеале я хотел бы иметь возможность иметь отдельные файлы conf для каждого приложения на лабораторных серверах ... без привязки DNS-имени к IP-адресу, потому что реально этого не произойдет для лаборатории.

По умолчанию теперь выглядит confкак это: (без изменений в базовой структуре папок)

location / {
    root /var/www/localhost/htdocs;
    location ~* \.php$ {
        if (!-f $document_root$fastcgi_script_name) { return 404; }
        include /etc/nginx/fastcgi.conf;
        include /etc/nginx/fastcgi_params;
        fastcgi_index index.php;
        fastcgi_pass 127.0.0.1:9000;
       }
}
0 голосов
/ 13 сентября 2018

Ознакомьтесь с документацией по имя_сервера .server_name widgets; создает виртуальный сервер с именем widgets, поэтому он ожидает HTTP-запрос, адресованный этому серверу.

С помощью myipaddress/widgets/info.php вы отправите запрос на сервер, помеченный как «default_server» (так как он адресуется через его IP-адрес, а не через имя), в вашем случае по умолчанию, который не поддерживает php.

Вы можете обойти эту проблему, добавив поддержку php в блок по умолчанию, но, по моему мнению, это просто маскирует сомнительную конфигурацию.


Итак, исходя из ваших правок, я предполагаючто вы хотите, чтобы сервер обслуживал php-страницы на IP-адресе, вам нужно добавить блок местоположения из ваших виджетов.Conf файл в блок конфигурации сервера по умолчанию (выше location /, в противном случае можно было бы перехватить все запросы для файлов php, как он определен первым)

location ~* \.php$ {
    try_files $uri =404;
    include /etc/nginx/fastcgi.conf;
    include /etc/nginx/fastcgi_params;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
}

и поместить файлы для виджетов в /var/www/localhost/widgets.Таким образом, они будут обслуживаться как http://ipaddress/widgets/filename.php.

Обратите внимание, однако, что этот должен рассматриваться как временный обходной путь .Обслуживание IP-адреса крайне ограничено и, среди прочего, не позволит вам правильно настроить веб-сайт https.Но чтобы начать работать в dev, это должно помочь.

...