首頁 後端開發 PHP問題 nginx 找不到php行程怎麼辦

nginx 找不到php行程怎麼辦

Jul 19, 2021 am 10:56 AM
nginx php

nginx找不到php進程的解決方法:1、修改nginx.conf的配置;2、使用try_files捕捉不存在的urls並回傳錯誤。

nginx 找不到php行程怎麼辦

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

nginx 找不到php流程怎麼辦?

nginx找不到php檔案

使用php-fpm解析PHP,"No input file specified","File not found"是令nginx新手頭痛的常見錯誤,原因是php-fpm程序找不到SCRIPT_FILENAME配置的要執行的.php文件,php- fpm傳回給nginx的預設404錯誤提示。

例如我的網站doucument_root下沒有test.php,訪問這個檔案時透過抓包可以看到回傳的內容。

HTTP/1.1 404 Not Found
Date: Fri, 21 Dec 2012 08:15:28 GMT
Content-Type: text/html
Proxy-Connection: close
Server: nginx/1.2.5
X-Powered-By: PHP/5.4.7
Via: 1.1 c3300 (NetCache NetApp/6.0.7)
Content-Length: 16
File not found.
登入後複製

 

很多人不想使用者直接看到這個預設的404錯誤訊息,想自訂404錯誤.

 

給出解決方案前我們來先分析下如何避免出現這類404錯誤,然後再說真的遇到這種情況(比如用戶輸入一個錯誤不存在的路徑)時該怎麼辦,才能顯示自訂的404錯誤頁。

一、錯誤的路徑被傳送到php-fpm進程

出現這類錯誤,十個有九個是後端fastcgi進程收到錯誤路徑(SCRIPT_FILENAME),而後端fastcgi收到錯誤路徑的原因大都是設定錯誤。

常見的nginx.conf的設定如下:

 

server {
    listen   [::]:80;
    server_name  example.com www.example.com;
    access_log  /var/www/logs/example.com.access.log;  
    location / {
        root   /var/www/example.com;
        index  index.html index.htm index.pl;
    }
    location /images {
        autoindex on;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/example.com$fastcgi_script_name;
        include fastcgi_params;
    }
}
登入後複製

這個設定中有很多不合理的地方,其中一個明顯的問題就是root指令被放到了location / 塊。如果root指令被定義在location區塊中那麼該root指令只能對其所在的location生效。其它locaiont中沒有root指令,像 location /images區塊不會匹配任何請求,需要在每個請求中重複配置root指令來解決這個問題。因此我們需要把root指令放在server區塊,這樣各個 location就會繼承父server區塊定義的documentroot,如果某個location需要定義一個不同的document_root,則可以在location單獨定義一個root指令。

另一個問題就是fastCGI參數SCRIPT_FILENAME 是寫死的。如果修改了root指令的值或移動檔案到別的目錄,php-fpm會回傳「No input file specified」錯誤,因為SCRIPT_FILENAME在設定中是寫死的並沒有隨著$doucument_root變化而變化,我們可以修改SCRIPT_FILENAME設定如下:

fastcgi_param  SCRIPT_FILENAME  documentrootfastcgi_script_name;
登入後複製

 

所以我們不能忘記在server區塊中設定root指令,不然documentroot的值為空,只會傳fastcgi_script_name到php-fpm,這樣就會導致「 No input file specified”錯誤。

 

二、請求的檔案真的不存在

當nginx收到一個不在的.php檔案的請求時,因為nginx只會檢查$uri是否是.php結尾,不會對檔案是否存在進行判斷,.php結尾的請求nginx會直接發給php-fpm處理。 php-fpm處理時找不到檔案就會回傳「No input file specified」帶著「404 Not Found」頭。

解決方案

我們在nginx攔截不存在的文件,請求並返回自訂404錯誤

使用 try_files 捕捉不存在的urls並傳回錯誤。

location ~ .php$ {
 try_files $uri =404;
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME ....
 ...................................
 ...................................
}
登入後複製

上面的設定會檢查.php檔案是否存在,如果不存在,會回傳404頁面。

推薦學習:《PHP影片教學

以上是nginx 找不到php行程怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP:處理數據庫和服務器端邏輯 PHP:處理數據庫和服務器端邏輯 Apr 15, 2025 am 12:15 AM

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

怎麼查看nginx是否啟動 怎麼查看nginx是否啟動 Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

linux怎麼查看nginx是否啟動 linux怎麼查看nginx是否啟動 Apr 14, 2025 pm 12:48 PM

在 Linux 中,使用以下命令檢查 Nginx 是否已啟動:systemctl status nginx根據命令輸出進行判斷:如果顯示 "Active: active (running)",則 Nginx 已啟動。如果顯示 "Active: inactive (dead)",則 Nginx 已停止。

linux怎麼啟動nginx linux怎麼啟動nginx Apr 14, 2025 pm 12:51 PM

在 Linux 中啟動 Nginx 的步驟:檢查 Nginx 是否已安裝。使用 systemctl start nginx 啟動 Nginx 服務。使用 systemctl enable nginx 啟用在系統啟動時自動啟動 Nginx。使用 systemctl status nginx 驗證啟動是否成功。在 Web 瀏覽器中訪問 http://localhost 查看默認歡迎頁面。

nginx在windows中怎麼配置 nginx在windows中怎麼配置 Apr 14, 2025 pm 12:57 PM

如何在 Windows 中配置 Nginx?安裝 Nginx 並創建虛擬主機配置。修改主配置文件並包含虛擬主機配置。啟動或重新加載 Nginx。測試配置並查看網站。選擇性啟用 SSL 並配置 SSL 證書。選擇性設置防火牆允許 80 和 443 端口流量。

PHP的目的:構建動態網站 PHP的目的:構建動態網站 Apr 15, 2025 am 12:18 AM

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

怎麼解決nginx跨域問題 怎麼解決nginx跨域問題 Apr 14, 2025 am 10:15 AM

解決 Nginx 跨域問題有兩種方法:修改跨域響應頭:添加指令以允許跨域請求,指定允許的方法和頭,以及設置緩存時間。使用 CORS 模塊:啟用模塊並配置 CORS 規則,允許跨域請求、方法、頭和設置緩存時間。

See all articles