[英]OpenSUSE php-fpm.conf permission denied
我無法在 OpenSUSE 上啟動 php-fpm。 當我運行systemctl restart php-fpm.service
時,將etc/php8/fpm/php-fpm.conf.default
到etc/php8/fpm/php-fpm.conf
后收到以下錯誤
[25-Apr-2021 12:52:18] ERROR: failed to open configuration file '/etc/php8/fpm/php-fpm.conf': Permission denied (13)
[25-Apr-2021 12:52:18] ERROR: failed to load configuration file '/etc/php8/fpm/php-fpm.conf'
[25-Apr-2021 12:52:18] ERROR: FPM initialization failed
我不得不切換到 php7-fpm 才能讓它工作。 似乎 php-fpm 在 OpenSUSE Tumbleweed 上無法正常工作。
apache mod php 沒有問題。
我的設置:
帶有 nginx 的 php8 (fast-cgi NOT USING SOCK) 在我的筆記本電腦上工作正常
硬件:HP 移動工作站 Compaq 8510w
操作系統:openSUSE Tumbleweed 20210
KDE 等離子版本:5.22.5
KDE 框架版本:5.85.0
Qt 版本:5.15.2
Kernel 版本:5.13.8-1-默認(64 位)
圖形平台:X11
處理器:2 × Intel® Core™2 Duo CPU T9300 @ 2.50GHz
Memory:3.8 GiB RA
圖形處理器:AMD RV630
為了安心:
為了方便:
我安裝了 mc (Midnight Commander) 並使用 nano 作為編輯器。
我將自己添加到組輪中,這樣我就可以使用 sudo 而無需輸入密碼。
mc 對於更改目錄、從文件跳轉和編輯配置文件非常方便,因為您可以以 root 身份使用 mc。 除此之外,您可以輕松更改為 shell 並返回 iE 以修改權限或使用其他 shell 命令。
更遠:
我在 .bashrc 中創建了別名,可以使用快捷方式啟動、停止和檢查服務。
alias sto='sudo systemctl stop $2'
alias str='sudo systemctl start $2'
alias rst='sudo systemctl restart $2'
alias sta='sudo systemctl status $2'
alias sn='sudo nano $2'
如何使用它們?
編輯 your.bashrc 后做一個
source .bashrc
要使用這些別名,請鍵入別名、空白和文件路徑,例如使用 nano 編輯文件 als sudo 嘗試:
sn /etc/rc.local
或者,只需幾次擊鍵即可檢索 php-fpm 的狀態:
sta php-fpm
我將 /etc/php8/php.ini 復制到“php.ini.commented”並刪除了原始中的所有注釋和非必需選項我還將 /etc/php8/ cli /php.ini 復制到 php.ini.commented 並刪除原文中的所有注釋和非必需選項我對 /etc/php8/fpm/php-fpm.d/www.conf 做了同樣的事情
為了避免沖突:
在進行任何其他軟件操作之前,請確保您的系統正在運行且沒有錯誤。
利用
dmesg -l err
或者
journalctl -b |grep error
先解決發現的錯誤!
驗證后,您應該執行
sudo zypper dup
使用以下命令
sudo chown -R www-data:www-data /srv
sudo chmod -R 755 /srv
我已經更改了所有內容的所有權和權限,這些內容將由 php-fpm 訪問。
如果您將符號鏈接放在 /srv/www/public 到其他地方的文件,則需要更改文件中的權限,鏈接指向。 例如,如果您在 /srv/www/public 中創建指向 phpmyadmin 數據的符號鏈接,則需要更改 /usr/share/mysql/phpmyadmin 中所有文件的權限。
您的池 /srv/www/public 中數據的用戶必須與 /etc/nginx/nginx.conf 中定義的用戶相同,並且
當使用名為“public”的池時,/etc/php8/fpm/php-fpm.d/www.conf 中 [public] 部分中的用戶和組也必須相同。
這是至關重要的,nginx 啟動時的大多數問題都是由錯誤的權限引起的。
一步步
ps -aux |grep php
結果應該類似於以下幾行。 這意味着 php-fpm 正在由 root 運行:
根 1262 0.0 0.3 54024 13260? ss 06:12 0:01 php-fpm:主進程(/etc/php8/fpm/php-fpm.conf)
www-數據 1335 0.0 0.2 54172 9576? S 06:12 0:00 php-fpm: 池公共
允許訪問其他任何人為黑客打開了大門。 請記住,您正在使用瀏覽器查看您的數據,但其他人也可以瀏覽它們。
擁有一個正在運行的系統后,很容易添加進一步的步驟。 要啟動,無需在 nginx 中啟用站點,您只需在 /etc/php8/fpm/php-fpm.d/www.conf 中創建一個池
故障排除常見錯誤:
MySql 錯誤:
我在這里假設您的 mariadb/mysql 已正確設置。
缺少或錯誤的權限將導致“未找到”錯誤。
mysql 中的故障排除記錄非常好,mysql 有一個交互式幫助 function。 閱讀文檔並按照 mysql 手冊的步驟進行測試訪問。 如果在本文檔中添加相關指南,那就太過分了。
php-fpm 未啟動:
無法打開配置文件'/etc/php8/fpm/php-fpm.conf':權限被拒絕(13)
和
sudo systemctl status php-fpm
您將找到有關內容和方式的更多詳細信息。
當 php-fpm 嘗試按照 access.log = "access.$pool.log" 行在 /var/log 中創建日志文件 "access.public.log" 時,可能存在訪問問題(查看文件 www.conf )。
此錯誤可能由 apparmor 中的設置引起/抑制。 選項是:
sudo systemctl stop apparmor
sudo systemctl disable apparmor
如果您進行了修改,可以在以下位置找到結果:
/etc/apparmor.d/php-pfm
vim: ft=apparmor
profile php-fpm /usr/sbin/php-fpm* flags=(attach_disconnected, complain) {
include <abstractions/base>
include <abstractions/nameservice>
include <abstractions/openssl>
include <abstractions/php>
include <abstractions/ssl_certs>
include if exists <local/php-fpm>
include if exists <php-fpm.d>
capability chown,
capability dac_override,
capability kill,
capability net_admin,
capability setgid,
capability setuid,
signal send peer=php-fpm//*,
deny / rw,
/etc/php8/fpm/php-fpm.conf r,
/etc/php{,5,7}/* r,
/usr/sbin/php-fpm* rix,
owner /var/log/php*-fpm.log rw,
owner /var/log/public.acess.log rw,
@{PROC}/@{pid}/attr/{apparmor/,}current rw,
@{run}/php{,-fpm}/php*-fpm.pid rw,
@{run}/php{,-fpm}/php*-fpm.sock rwlk,
owner /etc/php8/fpm/php-fpm.d/www.conf r,
change_profile -> php-fpm//*,
}
或臨時注釋該行
access.log = /var/log/$pool.access.log 在你的 www.conf
要開始這個文件不是絕對必需的,並且評論它幫助我抑制“php-fpm 無法啟動”錯誤。
最重要和最詳細的日志文件是
/var/log/nginx/error.log
要調試,每次修改后你應該使用
sudo tail -1 /var/log/nginx/error.log
您會看到大多數錯誤都是權限錯誤,因為 mysql 無法訪問您的數據庫或 php-fpm 無法使用您的 php/html 文件!
這是我的/etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
#pid /run/nginx.pid; not required when using tcp
events {
worker_connections 1024;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etch/nginx/conf.d/*.conf;
server {
listen 80;
server_name 127.0.0.1;
root /srv/www/public; # without this root instruction nqinx will use /usr/ as prefix and you will get a not found error!
error_page 500 502 503 504 /50x.html; # redirect server error pages to the static page /50x.html
location = /50x.html {
root /srv/www/htdocs/;
}
location ~ \.php$ { # 404
try_files $fastcgi_script_name =404;
include /etc/nginx/fastcgi_params;
# default fastcgi_params
# fastcgi settings
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
# fastcgi params
fastcgi_param DOCUMENT_ROOT /srv/www/public;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location / {
root /srv/www/public;
try_files $uri $uri/ =404;
index index.nginx-debian.html index.php index.html index.htm;
}
location ~ /\.ht {
# deny access to .htaccess files, if Apache's document root concurs with nginx's one
deny all;
}
include vhosts.d/*.conf;
}
}
/etc/php8/fpm/php-fpm.d/www.conf 的文件內容
[public]
prefix = /srv/www/$pool
user = www-data
group = www-data
listen = 127.0.0.1:9000
;use these settings only if a socket is used
;listen.owner = www-data
;listen.group = www_data
;listen.mode = 0660
pm = static
pm.max_children = 1
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
; this optional feature is well documented in the file and further instructions for how to set it up can be found on the web
pm.status_path = /status
; if fpm-phm cannot start, temporary comment the two lines access.log, but reactivate the instructions as soon as php-fpm is operational
; if there are wrong permission-settings, php-fpm will not start
access.log = /var/log/$pool.access.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
catch_workers_output = yes
security.limit_extensions = .php .html
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
文件 /etc/php8/fpm/php-fpm.conf
; FPM Configuration ;
[global]
process_control_timeout = 10
process.max = 128
daemonize = no
rlimit_core = 0
rlimit_files = 1024
events.mechanism = epoll
systemd_interval = 10
include=/etc/php8/fpm/php-fpm.d/*.conf
通過這個配置,我運行了幾個 mysql 數據庫和內容管理以及 phpmyadmin。 下圖是我使用mysql數據庫和自行設計的php格式的forms的內容管理系統的截圖。 在位置定義中,無論是加載樣式表還是圖片/電影,都不需要進一步的說明。
在 Chrome 中使用 Google 的開發人員工具進行檢查證明,所有樣式表、json 文件和其他目錄的引用和鏈接都已找到,並且沒有錯誤。
當然,我花了一些時間來完成這一切。
這個答案可以幫助每個想要設置 nginx 並節省時間的人。 nginx 和 php 的文檔是完整而優秀的。 對於大多數命令,有一個 --help 選項、手冊頁和網頁.....
Yes, I know! Help and man-pages are written by excellent IT-engineers, some of these hexadecimal-thinking people might have difficultes to translate their digital slang to human-understandable language. That's why some pages are more confusing than helping. Anyway, press the F1-key, try the help and forgive them. Where would we be without them?
在我的小網絡中,我使用 24/7 運行 Raspberry Pi 3 B+ 和 64 位操作系統作為服務器,將數據存儲在兩個 USB 驅動器上。
在這台服務器上訪問本地文件的配置和我筆記本電腦上的配置幾乎一樣。
只有兩個小區別:
在“debian buster”上,應用程序 php8 被命名為 php8.0 並且一些目錄具有不同的名稱,因此您可以使用上述配置文件用於 Raspberry debian buster,但有以下限制:相關的“包含”行不同,需要更改根據配置文件的位置名稱。
我在樹莓服務器上的 nginx.conf 有幾行額外的代碼,以便通過 DDNS 訪問內容,但那是另一章。
我想強調一下,我不是 IT 專家。 我在作為機械工程師的專業活動中積累了一些計算經驗,所有進一步的知識都來自按 F1 鍵、閱讀論壇投稿、手冊、幫助文件、網頁以及 - 不要忘記 - 從犯過的錯誤中。
我希望這可以鼓勵其他人繼續努力。 Linux 結構非常清晰,易於理解。 谷歌錯誤,仔細觀察你的日志文件,享受最終運行完全可操作的 php-fpm/nginx 的樂趣。
我需要再次提醒您:
不要忘記重置所有臨時解決方案。
干杯
這與apparmor設置有關。 請編輯/etc/apparmor.d/php-fpm
:
19 /etc/php{,5,7,8}/** r,
允許通過php-fpm
進程訪問目錄/etc/php8/
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.