如何解決 Nginx 與 FastCGI 通訊錯誤 "Primary script unknown"?

cn-five發表於2020-08-21

錯誤原因

不少小夥伴在搭建好 LNMP 環境後,進行測試時,在測試頁會出現 File not found. 的提示資訊。檢視錯誤日誌報告顯示 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream 這樣的錯誤資訊。之所以出現這樣的情況,是因為 Nginx 將請求 uri 轉發給 FastCGI 處理時, FastCGI 並沒有接收到相應的 uri 引數。出現這樣的錯誤大致分為以下三種。

採用預設配置資訊

在安裝好 Nginx 並配置好根目錄之後,採用了預設的 SCRIPT_FILENAME 配置引數,這樣的話 FastCGI 無法定位到正確目錄解析 php 檔案。
預設配置

location ~ \.php$ {
    root           /home/web;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

改為

location ~ \.php$ {
    root           /home/web;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

$document_root 表示 root 指定的目錄,針對 /home/web 目錄下的 php 檔案進行解析。

根目錄配置錯誤

如果你的根目錄地址是 /home/web ,實際配置成 /home/www ,也會出現同意的錯誤資訊,將錯誤地址改回正確地址即可。

Nginx 使用者與 Php-fpm 使用者不一致

如果以上配置都為正確的情況下,將 nginx.conf 中的 user 使用者配置與 www.conf 使用者配置設定為統一的使用者與使用者組。
nginx.conf

http {
    user  nginx nginx;
    worker_processes  8;
    ...
}

Php-fpmwww.conf

user = nginx
group = nginx

如果沒有 nginx 使用者,建立這個使用者

useradd nginx
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章