nginx не обслуживает php, а загружает

Я нашел аналогичный вопрос здесь: 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

RC-статус

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-файл, он находит директиву «местоположение» в правильном файле 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-адреса, а затем имени папки/приложения.


person dot    schedule 13.09.2018    source источник
comment
Это был бы лучший вопрос для superuser.com или serverfault.com   -  person Goodbye StackExchange    schedule 13.09.2018
comment
Ok. какой лучше подходит? Я перенесу его...   -  person dot    schedule 13.09.2018
comment
Прочтите каждое из описаний и решите сами. superuser.com/help/on-topic и serverfault.com/help/on-topic   -  person Goodbye StackExchange    schedule 13.09.2018


Ответы (2)


Посмотрите документацию по server_name. 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, это должно помочь.

person fvu    schedule 13.09.2018
comment
Я пытался поиграть с именем сервера, но не смог понять/увидеть проблему. Я обновлю свой пост, чтобы показать вам. Но если я хочу получить доступ к сайту, как в примерах, которые я привел, как мне изменить значение server_name? Также можете объяснить, почему система правильно возвращает правильный index.html, если имя сервера неверное? - person dot; 13.09.2018
comment
см. РЕДАКТИРОВАТЬ 1. Я думаю, это демонстрирует то, что вы пытаетесь объяснить? Я могу воссоздать проблему, но я не знаю, как это исправить. Я уже пробовал несколько разных вещей - person dot; 13.09.2018

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

Мне нужно будет прочитать, как решить эту проблему для будущих случаев. В идеале я хотел бы иметь отдельные файлы конфигурации для каждого приложения на лабораторных серверах... без привязки 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;
       }
}
person dot    schedule 14.09.2018