Apache-2.2
‘文件未找到。‘切換到 php fpm (apache, ubuntu server 18.04 LTS) 後
我知道這個問題已經被回答過多次,但答案幾乎都是不同的,而且有點令人困惑。我嘗試了很多答案,但沒有一個有效。我按照這個問題的答案(在 Ubuntu 16 中將 apache 從 prefork 切換到 event,讓 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 中不應有路徑。請參閱下面的配置範例。
- 您可能在 FastCGI 的池定義中使用了一些 chroot/prefix 參數。不幸的是,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>