linux環(huán)境配置安裝php+nginx

PHP是超文本預(yù)處理器,是一種開源在服務(wù)器端執(zhí)行的腳本語言。

yum是一個在centos中的shell前端軟件包管理器,基于PRM包管理,能夠從指定的服務(wù)器自動下周RPM包并且安裝,可以自動處理依賴性關(guān)系,并且一次安裝所有依賴的軟件包。

通過yum安裝php

yum install php

為了讓Nginx可以操作PHP請求,需要安裝php-fpm ,php與nginx連接軟件

yum -y install php-fpm

隨后為了讓MariaDB與PHP相連接,需要安裝php-mysqlnd,mysqlnd是一種效率更高的php和mysql的連接方式。

yum -y install php-mysqlnd? ? php與mysql連接軟件

yum -y install php-mbstring 為了使PHP不出現(xiàn)中文亂碼,再安裝上php-mbstring? php的中文編碼庫

yum install php-xml ,php與xml連接軟件,使得PHP可以解析XML

啟動php-fpm,并設(shè)置php-fpm開機自啟

service php-fpm start

chkconfig php-fpm on

在相應(yīng)的目錄下找到nginx.conf配置文件,這里是在默認目錄下,開啟Nginx支撐PHP的模塊,下面是修改內(nèi)容

保存完修改后的配置,重啟一下nginx,讓配置生效,我們就可以通過nginx來處理PHP請求了。

可以自己在nginx的網(wǎng)頁根目錄寫一個php文件要驗證Nginx是否已經(jīng)可以處理PHP請求了,這里在/use/local/nginx/html(Nginx默認位置)中創(chuàng)建one.php文件,然后寫上簡單的數(shù)字。

重新啟動nginx?

創(chuàng)建一個 ayu.php文件,隨意輸入字符,然后通過相應(yīng)的URL訪問該php文件,如果Nginx不支持PHP請求,瀏覽器就會彈出下載one.php文件提示框,若Nginx支持PHP請求,就會相應(yīng)相應(yīng)的PHP界面。

重啟nginx后訪問后發(fā)現(xiàn)無法訪問

查看nginx的error日志發(fā)現(xiàn)

[error] 53643#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.122.1, server: localhost, request: "GET /one.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.122.1"

是無法連接到php-fpm,打開php-fpm的配置文件www.conf,發(fā)現(xiàn)與nginx.conf里面的端口不匹配,一種是unix socket,一種是tcp端口,改成統(tǒng)一

gedit /etc/php-fpm.d/www.conf

改成

保存退出重新加載php-fmp

(注:這里可能會有個坑:在nginx配置下的conf.d文件下如果有php-fmp,內(nèi)容可能未更改為ip通信方式,會導(dǎo)致nginx與php-fmp通信失敗。)

訪問one.php

搞定

五、php-fpm與Nginx的關(guān)系

從上面的配置中,我們知道了Nginx需要安裝php-fpm后就可以響應(yīng)PHP請求,但是其中Nginx與PHP是如何通過php-fpm進行協(xié)同工作的呢?

要弄明白上面的問題,首先就要知道CGI (Common Gateway Interface) 和 FastCGI 這兩個協(xié)議

CGI是Web Server與后臺語言交互的協(xié)議,通過這個協(xié)議,開發(fā)者可以使用任何語言來處理Web Server發(fā)來的請求,動態(tài)生成相應(yīng)的內(nèi)容,但是CGI對每個請求都需要生成出一個全新的進程來處理,處理完后又會將對應(yīng)的進程關(guān)閉,隨著Web的發(fā)展,高并發(fā)的情景越來常見,CGI這種方式已經(jīng)不能滿足這樣的需求了,所以FastCGI就誕生了,看名字就知道,就是快速的CGI,它可以在一個進程內(nèi)處理多個請求,而不會在請求處理完后結(jié)束進程,這樣在性能上有很大的提高

而PHP-fpm是FastCGI協(xié)議PHP的實現(xiàn),也就是說,任何實現(xiàn)了FastCGI協(xié)議的Web Server都可以與之通信(Nginx就實現(xiàn)了FastCGI),PHP-fpm對應(yīng)標準的FastCGI還提供了一些增強功能

PHP-fpm是一個PHP進程管理器,它包含master進程(主進程)和worker進程(工作進程),其中master進程負責(zé)監(jiān)聽端口,默認配置是監(jiān)聽9000端口,接收來自Web Server的請求,而worker進程一般有多個,具體要多少個,可以對配置文件進行配置,默認是6個,每個worker進程中都內(nèi)嵌了一個PHP解釋器,是PHP代碼真正執(zhí)行的地方

php-fpm就是來管理啟動一個master進行和多個worker進程的程序

php-fastcgi 只是一個cgi程序,只會解析php請求,并且返回結(jié)果,不會管理

php-cgi執(zhí)行效率低下,因此被php-fastcgi取代。

可以通過下面命令查看系統(tǒng)中php-fpm的情況

ps -ef | grep fpm

從Nginx角度來講,Nginx處理可以進行HTTP請求的代理還可以進行其他許多協(xié)議請求的代理,其中就有與php-fpm相關(guān)的FastCGI協(xié)議,為了能夠讓Nginx理解FastCGI協(xié)議,Nginx通過FastCGI模塊來將HTTP請求映射為對應(yīng)的FastCGI請求

Nginx的FastCGI模塊提供了fastcgi_param指令來處理相應(yīng)的映射關(guān)系,可以看一下Nginx中FastCGI的配置文件,就發(fā)現(xiàn)該模塊的主要工作就是將Nginx中的變量映射為PHP中能理解的變量

到這里再仔細看一下nginx.conf這個配置文件

可以看出,Nginx新建了一個虛擬主機,監(jiān)聽80端口的請求,根目錄為html(/usr/local/nging/html),默認主頁為index.html或index.htm

接著就看到開啟PHP支持的配置,可以看出將所有以.php結(jié)尾的請求都交給FastCGI模塊處理,其監(jiān)聽端口為9000,而就像上面講的,F(xiàn)astCGI模塊將變量映射成PHP變量,將請求交給了PHP—fpm來處理,當(dāng)用戶對Nginx發(fā)起PHP請求時,Nginx首先從80端口接收到PHP請求,然后將該請求發(fā)送給9000端口,經(jīng)FastCGI模塊處理交給了在監(jiān)聽9000端口的PHP-fpm,PHP-fpm的master進程將PHP執(zhí)行任務(wù)交個下面的worker進程,worker進程使用內(nèi)嵌的php解釋器來執(zhí)行PHP并將獲得的結(jié)果層層返回,最終通過Nginx發(fā)出,結(jié)果就顯示在用戶眼前了

原文出自:https://blog.csdn.net/adolph_qiang/article/details/107609496(部分補充)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容