«Файл не найден». после перехода на php fpm (apache, ubuntu server 18.04 LTS)

Я знаю, что на этот вопрос уже давали ответы несколько раз, но ответы почти все разные и в некотором роде сбивают с толку. Я пробовал много ответов, но ни один из них не работает. Я следую ответу на этот вопрос ( переключить apache с prefork на event в Ubuntu 16, заставить php 7 работать ), и это сработало правильно. Но затем я что-то сделал (не могу вспомнить, что .. упс), и он сломался, и я получил следующую ошибку:

File not found.

Файл виртуального хоста:

#ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.2-fpm.sock|fcgi://localhost/var/www/nextcloud/
#ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.2-fpm.sock|fcgi://127.0.0.1:9000


LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so



<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin [[..]]@icloud.com
    ServerName [[..]].me
    ServerAlias www.[[..]].me
    DocumentRoot /var/www/nextcloud
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/www.[[..]].me/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.[[..]].me/privkey.pem

ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.2-fpm.sock|fcgi://localhost/var/www/nextcloud/

#        <FilesMatch \.php>
#            SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/var/www/nextcloud/"
#        <FilesMatch>

</VirtualHost>
</IfModule>
<IfModule mod_ssl.c>
<VirtualHost *:80>
    ServerAdmin [[..]]@icloud.com
    ServerName [[..]].me
    ServerAlias www.[[..]].me
    DocumentRoot /var/www/nextcloud
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
Redirect permanent / https://[[..]].me/
# Some rewrite rules in this file were disabled on your HTTPS site,
# because they have the potential to create redirection loops.
# RewriteCond %{SERVER_NAME} =www.[[..]].me [OR]
# RewriteCond %{SERVER_NAME} =[[..]].me
# RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
#        <FilesMatch \.php>
#            SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost/"
#        <FilesMatch>

</VirtualHost>
</IfModule>
<Directory /var/www/nextcloud>
         AllowOverride All
</Directory>

Кроме того, я новичок в PHP. Мне очень жаль, что я снова задаю этот вопрос. Я знаю, что это дубликат, но никак не могу его достать.

Большое вам спасибо!

0
задан 22 January 2019 в 23:39
1 ответ

Вы не включили конфигурацию php-fpm, что важно. Важно то, как вы определяете свой пул (см. Ниже).

FastCGI - это просто протокол связи, который отправляет запрос PHP, демону FastCGI. Результатом является то, что демон PHP не может найти файл, который был ему передан.

В отсутствие этого простейшего решения является установка strace и присоединение его к вашему рабочему пулу (это проще, если у вас всего 1-2 рабочих). Наблюдайте за путями, которые он пытается открыть, а затем определите, существуют ли они.

Две возможные вещи, которые я вижу не так (или могу видеть неправильные) в вашей конфигурации.

  1. Я вижу fcgi: // localhost / var / www / nextcloud / который, вероятно, является префиксом / var / www / nextcloud к полному пути. Это не правильно. У вас не должно быть пути в вашем proxy_path_match. См. Мой пример конфигурации ниже.

  2. Возможно, вы используете некоторые параметры chroot / prefix в определении пула в FastCGI. К сожалению, chroot не работает с php-fpm / apache уже много лет (отчет об ошибке: https://bugs.php.net/bug.php?id=62279 ). Если вы используете это, выключите его.

С этими двумя исправлениями все будет в порядке.

И для записи, моя конфигурация apache имеет только ОДИН раздел, связанный с FastCGI / PHP (как показано ниже). Это все, что вам нужно для PHP-FPM. В глобальной области или внутри виртуального хоста, в зависимости от того, что вы предпочитаете.

  <FilesMatch     \.php$>
  <If "-f %{REQUEST_FILENAME}">
    SetHandler      "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost/"
  </If>
  </FilesMatch>
1
ответ дан 4 December 2019 в 15:46

Теги

Похожие вопросы