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

Это был бы лучший вопрос для superuser.com или serverfault.com

Goodbye StackExchange 13.09.2018 20:14

Ok. какой лучше подходит? Я переставлю ...

dot 13.09.2018 20:14

Прочтите каждое из описаний и решайте сами. superuser.com/help/on-topic и serverfault.com/help/on-topic

Goodbye StackExchange 13.09.2018 20:15
0
3
1 492
2

Ответы 2

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

Я попытался поиграть с именем сервера, но не смог понять / увидеть проблему. Я обновлю свой пост, чтобы показать вам. Но если я хотел получить доступ к сайту, как это делалось в примерах, которые я привел, как мне нужно изменить значение server_name? Также можете ли вы объяснить, почему система правильно возвращает правильный index.html, если имя сервера неправильное?

dot 13.09.2018 20:22

см. РЕДАКТИРОВАТЬ 1. Я думаю, это демонстрирует то, что вы пытаетесь объяснить? Я могу воссоздать проблему, но не знаю, как ее исправить. Я уже пробовал несколько разных вещей

dot 13.09.2018 20:31

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

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

default 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;
       }
}

Другие вопросы по теме