Назад | Перейти на главную страницу

nginx загружает файлы php вместо их рендеринга

Я нашел здесь похожий вопрос: https://stackoverflow.com/questions/25591040/nginx- sizes-php-files-as-downloads-instead-of-executing-them Но, к сожалению, ответ там мне не помогает. Итак, вот моя история.

Что работает

Когда я перехожу к 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

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

ПРИМЕЧАНИЕ: nginx install помещает в папку и fastcgi.conf, и fastcgi_params ... они выглядят очень похоже. Я играл и включил оба.

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, если в моей настройке есть действительно огромные ошибки, которые вы можете увидеть, можете ли вы указать на них? Спасибо.

основываясь на подсказке из комментариев Романа Спиака (о том, что 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;
       }
}

Я не использовал alpine linux, поэтому, пожалуйста, дважды проверьте, загружены ли оба ваших файла cofig.

Например, поместите синтаксическую ошибку в конфигурацию и запустите nginx -t если поймает.

Старайтесь не помещать корневой каталог в одной конфигурации в подкаталог другой конфигурации.

Попробуйте разместить их:

  • root /var/www/localhost; для /etc/nginx/conf.d/default.conf
  • root /var/www/widgets; для /etc/nginx/conf.d/widgets.conf

Пожалуйста, знай, что server_name Директива должна быть разрешаемой записью DNS или hosts (в / etc / hosts), чтобы блок сервера обслуживался должным образом.

Для вашей второй части вопроса попробуйте посмотреть https://linuxconfig.org/basic-php-7-and-nginx-configuration-on-ubuntu-16-04-linux

Мой совет - попытаться прочитать директивы конфигурации nginx, чтобы получить общее представление о том, что они означают.

Согласно ссылке alexus, замените try_files на

if (!-f $document_root$fastcgi_script_name) { return 404; }