1. 探討nginx與php-fpm是不是以多進程多線程方式運行的
這個問題比較初級,官方文檔上的資料都是很全的。
Nginx 是非阻塞IO & IO復用模型,通過操作系統提供的類似 epoll 的功能,可以在一個線程里處理多個客戶端的請求。
Nginx 的進程就是線程,即每個進程里只有一個線程,但這一個線程可以服務多個客戶端。
PHP-FPM 是阻塞的單線程模型,pm.max_children 指定的是最大的進程數量,pm.max_requests 指定的是每個進程處理多少個請求後重啟(因為 PHP 偶爾會有內存泄漏,所以需要重啟).
PHP-FPM 的每個進程也只有一個線程,但是一個進程同時只能服務一個客戶端。
大多數的 Linux 程序都傾向於使用進程而不是線程,因為 Linux 下相對來說創建進程的開銷比較小,而 Linux 的線程功能又不是很強大。
你可以去後盾人平台看看,裡面的東西不錯
2. 請教一個問題 伺服器 用的是 centos nginx php 總是報 502 Bad Gateway這個錯誤 如何解決
重啟下php-fpm試試,或者修改fpm配置文件
/etc/php5/fpm/pool.d/www.conf
將
listen=/var/run/php5-fpm.sock
改為
listen=127.0.0.1:9000
試試。
3. 如何正確配置Nginx+PHP
php用php-fpm啟動,然後nginx
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
這樣就可以了
4. nginx phpfpm 500 錯誤 但是會返回 php 結果,這個是什麼問題
nginx是一個web伺服器,因此nginx的access日誌只有對訪問頁面的記錄,不會有php 的 error log信息。
nginx把對php的請求發給php-fpm fastcgi進程來處理,默認的php-fpm只會輸出php-fpm的錯誤信息,在php-fpm的errors log里也看不到php的errorlog
原因是php-fpm的配置文件php-fpm.conf中默認是關閉worker進程的錯誤輸出,直接把他們重定向到/dev/null,所以我們在nginx的error log 和php-fpm的errorlog都看不到php的錯誤日誌。
5. 如何安裝配置nginx+phpfpm+php伺服器
php用php-fpm啟動,然後nginx
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
這樣就可以了
6. 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;
}
7. 搭建nginx 和php-fpm 容器的運行環境求助
問題是關鍵是fpm進程是在容器中尋找對應的php文件然後解析,而不是在宿主機,啟動容器的時候指定目錄掛載即可。
8. 如何正確配置Nginx + PHP
先上配置的過程,下面是解釋。
9. php-fpm與nginx鏈接不起來啊,求助求助
連接不了吧具體信息貼出來,php-fpm日誌貼出來,nginx配置貼出來才知道,不然你這樣問誰知道什麼原因。
10. php-fpm 正常啟動,nginx也正常啟動,但是為什麼訪問PHP是502
確定nginx已解析php-fpm
確定訪問目錄是否正確並且有執行許可權
確定php服務是否啟動,如果沒有啟動,狀態應該是下載php文件