FastCGI sent in stderr: "Primary script unknown"

解決完 nginx worker_connections are not enough 後,我依舊要解決問題。這次是在 php 檔案只出現 File not found 字樣,但檔案明明就有。排查 Log 以後,發現以下錯誤:

[error] 18762#0: *12 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1", referrer: "http://127.0.0.1/"

Server Fault 以後,發現可以在 Log 宣告變數:

log_format scripts '$document_root$fastcgi_script_name > $request' #請放在 http 區塊

這個意思是,建立一種紀錄模式稱為 scripts,裡面會紀錄 $document_root $fastcgi_script_name $request 三個變數,以及 > 符號。接著在 nginx.conf 的 server 區塊寫下:

access_log /my/logs/path.log scripts; #/my/logs/path.log 要修改為 nginx 可執行的路徑

他會在 /my/logs/path.log 的檔案內,紀錄先前寫好的 scripts 模式。接著去 /my/logs/path.log 裡查查看:

/usr/local/Cellar/nginx/1.13.12/html/phpinfo.php > GET /phpinfo.php HTTP/1.1

明顯不對。要去設定。我想是 Document Root 的問題吧。那就去 nginx.conf 的 server 區塊設定:

root           /Users/my/project;

重啟後成功,收工!

參考資料