A. nginx php文件不能正常訪問.
一般nginx默認配置中會是這個樣子的。這里有一個SCRIPT_FILENAME變數,但是fastcgi_params這個文件中是不包含該變數的,改變數的定義實際上是在fastcgi.conf文件中。
實際上可以把配置修改成如下的配置。
location~.php${
root/usr/share/nginx/html;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
fastcgi_intercept_errorson;
includefast_cgi.conf;
#可以增加rewrite,也可以不增加。
}
按如上的配置,如果訪問127.0.0.1:9000/a.php,則實際上根據root指令和fast_cgi.conf配置,nginx會通過fast_pass指令訪問/usr/share/nginx/html/a.php這個文件。
記得用root指令,指定站點的文檔根路徑。
B. nginx 反向代理後為什麼訪問php文件 會提示404
可能的原因:
nginx配置有誤,沒有將請求轉發到正確的處理程序(如php-fpm等),轉發到一個不存在著的路徑
請求已經轉發到php處理程序,但php處理程序配置沒有找到對應的腳本
php已經處理了腳本,但代碼里返回了一個404的狀態碼
C. nginx和php-fpm之間是怎樣通信的
FastCGI原理
FastCGI是一個運用於Http Server和動態腳本語言間通信的介面,多數流行的Http Server都支持FastCGI,包括Apache、Nginx和lighttpd等。同時,FastCGI也被許多腳本語言支持,其中就有PHP。
FastCGI介面方式採用C/S結構,可以將HttP伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或者多個腳本解析守護進程。當HttP伺服器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然後將得到的結果返回給客戶端。這種方式可以讓HttP伺服器專一地處理靜態請求或者將動態腳本伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。
Nginx+php-fpm實現原理
Nginx本身不會對PHP進行解析,終端對PHP頁面的請求將會被Nginx交給FastCGI進程監聽的IP地址及埠,由php-fpm作為動態解析伺服器處理,最後將處理結果再返回給nginx。其實,Nginx就是一個反向代理伺服器。Nginx通過反向代理功能將動態請求轉向後端php-fpm,從而實現對PHP的解析支持,這就是Nginx實現PHP動態解析的原理。
Nginx不支持對外部程序的直接調用或者解析,所有的外部程序(包括PHP)必須通過FastCGI介面來調用。FastCGI介面在Linux下是socket(這個socket可以是文件socket,也可以是ip socket)。為了調用CGI程序,還需要一個FastCGI的wrapper(wrapper可以理解為用於啟動另一個程序的程序),這個wrapper綁定在某個固定socket上,如埠或者文件socket。當Nginx將CGI請求發送給這個socket的時候,通過FastCGI介面,wrapper接收到請求,然後派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接著,wrapper再將返回的數據通過FastCGI介面,沿著固定的socket傳遞給Nginx;最後,Nginx將返回的數據發送給客戶端。
Nginx 簡單配置
location ~ \.php$ {
root /home/admin/web/nginx/html/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/admin/web/nginx/html/$fastcgi_script_name;
include fastcgi_params;
}
D. php-fpm 正常啟動,nginx也正常啟動,但是為什麼訪問PHP是502
先確認下html是否訪問正常
如果不正常就是nginx問題了
如果正常就是nginx配置訪問php的問題或者php的代碼有問題
E. nginx 瀏覽php的時候會變成下載
php的時候會變成下載:這是因為nginx沒有設置好碰到php文件時,要傳遞到後方的php解釋器。
看看你的nginx.conf配置,裡面有沒有這樣的設置:
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
}
上面的意思,就是說,碰到.php結尾的文件,傳遞給後方127.0.0.1的9000埠上。
當然啦,你的php-fpm解析器也需要正常運行,並監聽好9000埠,才能最終生效並有效處理php腳本。
windows下開啟監聽的辦法,php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini
F. php-fpm 正常啟動,nginx也正常啟動,但是為什麼訪問PHP是502
確定nginx已解析php-fpm
確定訪問目錄是否正確並且有執行許可權
確定php服務是否啟動,如果沒有啟動,狀態應該是下載php文件