Я знаю, что на этот вопрос уже давали ответы несколько раз, но ответы почти все разные и в некотором роде сбивают с толку. Я пробовал много ответов, но ни один из них не работает. Я следую ответу на этот вопрос ( переключить 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. Мне очень жаль, что я снова задаю этот вопрос. Я знаю, что это дубликат, но никак не могу его достать.
Большое вам спасибо!
Вы не включили конфигурацию php-fpm, что важно. Важно то, как вы определяете свой пул (см. Ниже).
FastCGI - это просто протокол связи, который отправляет запрос PHP, демону FastCGI. Результатом является то, что демон PHP не может найти файл, который был ему передан.
В отсутствие этого простейшего решения является установка strace
и присоединение его к вашему рабочему пулу (это проще, если у вас всего 1-2 рабочих). Наблюдайте за путями, которые он пытается открыть, а затем определите, существуют ли они.
Две возможные вещи, которые я вижу не так (или могу видеть неправильные) в вашей конфигурации.
Я вижу fcgi: // localhost / var / www / nextcloud / который, вероятно, является префиксом / var / www / nextcloud к полному пути. Это не правильно. У вас не должно быть пути в вашем proxy_path_match. См. Мой пример конфигурации ниже.
Возможно, вы используете некоторые параметры 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>