Nginx學(xué)習(xí):FastCGI模塊(一)基礎(chǔ)配置萬(wàn)眾矚目啊,總算到 FastCGI 了??次椅恼潞鸵曨l的各位大佬們8成以上都是 PHPer 吧,要做 PHP ,F(xiàn)astCGI 的配置就少不了。CGI 、FastCGI 、PHP-FPM 這些概念,咱們?cè)诤茉缰暗?span> 了解PHP-FPMhttps://mp.weixin.qq.com/s/NUpDnfYfbPuWmal4Am3lsg 這篇文章中就學(xué)習(xí)過(guò)了。不記得的小伙伴可以回去看下哦,如果感覺(jué)說(shuō)得太簡(jiǎn)單了,大家還可以去自己搜索一下相關(guān)的資料。 FastCGI 模塊的全稱(chēng)是 ngx_http_fastcgi_module ,包含在核心源碼中,不需要單獨(dú)編譯了。 基本配置還是拿我們?cè)?HTTP 核心模塊中第一篇文章中的例子來(lái)說(shuō)。最簡(jiǎn)單的配置就是下面這樣。
沒(méi)錯(cuò),就這么簡(jiǎn)單的幾個(gè)配置,我們后面會(huì)一一說(shuō)明它們的作用。標(biāo)準(zhǔn)的連接 PHP-FPM 就是這么簡(jiǎn)單,但是,CGI 是通用網(wǎng)關(guān)接口,因此,不僅僅是 PHP ,Python、Java、C++ 之類(lèi)的任何語(yǔ)言,只要是實(shí)現(xiàn)了 FastCGI 接口,那么他們都可以通過(guò)這種形式與 Nginx 進(jìn)行交互。并且 FastCGI 也提供這些語(yǔ)言的 API ,只不過(guò)我對(duì)這些語(yǔ)言不熟悉,而且大部分情況下,使用 Nginx 的 FastCGI 都是和 PHP 打配合的,因此,咱們也就不多贅述了。有興趣,并且精通這些語(yǔ)言的小伙伴可以自己找資料調(diào)試一下哦。 接下來(lái),我們今天就先看看上面這個(gè)配置中的這三條配置指令是干嘛的。 fastcgi_pass設(shè)置 FastCGI 服務(wù)器的地址。
沒(méi)有默認(rèn)值,也可以將這個(gè)配置項(xiàng)當(dāng)做是 FastCGI 的開(kāi)關(guān)。它只能配置在 location 子模塊中,也就是說(shuō),必須是指定路徑的或者條件的 location 才能使用 FastCGI 。 它的參數(shù)就一個(gè),之前我們就學(xué)習(xí)過(guò),可以使用 另外,這個(gè)服務(wù)器地址也可以是一組服務(wù)器,會(huì)以循環(huán)的方式請(qǐng)求,類(lèi)似于默認(rèn)的負(fù)載均衡配置,不過(guò)還是那句話(huà),很少有人這么玩。詳細(xì)的負(fù)載均衡 upstream 模塊我們后面也會(huì)學(xué)到,主要還是看那邊的吧。 地址參數(shù)還可以包含變量,并且如果地址被指定為域名,則在所描述的服務(wù)器組中搜索該名稱(chēng),如果沒(méi)有找到,則使用解析器來(lái)確定。 fastcgi_index在
其實(shí)和大家最常見(jiàn)的那個(gè)
然后請(qǐng)求 /php/info/ ,那么實(shí)際訪問(wèn)的就是 需要注意的是,如果我們?cè)L問(wèn)的是靜態(tài)頁(yè)面,那么還是會(huì)走 root 或者 alias 的,不會(huì)走到 FastCGI 配置的路徑中。而且,之前的文章也說(shuō)過(guò)了,SCRIPT_FILENAME 指定的路徑需要是絕對(duì)路徑,這個(gè)也是容易配錯(cuò)的地方。 fastcgi_param設(shè)置應(yīng)傳遞給 FastCGI 服務(wù)器的參數(shù)。
沒(méi)有默認(rèn)值,但可以配置在 http、server、location 模塊中。它的 value 值可以包含文本、變量及其組合。當(dāng)且僅當(dāng)當(dāng)前級(jí)別上沒(méi)有定義 fastcgi_param 指令時(shí),這些指令才從上級(jí)的配置級(jí)別繼承。一般來(lái)說(shuō),PHP 必須的主要是這兩個(gè)。
SCRIPT_FILENAME 不用多說(shuō),PHP-FPM 要執(zhí)行文件就要看它。但是我們的配置文件中沒(méi)有寫(xiě)下面這個(gè) QUERY_STRING 呀,注意哦,在我們的配置中,fastcgi_param 下面還 include 了一個(gè)文件。我們打開(kāi)這個(gè)文件看看。
看到了吧,其實(shí)就是 Nginx 已經(jīng)幫我們準(zhǔn)備好了一堆配置。這些東西我們?cè)?PHP 的 $_SERVER 中可以獲取到。比如我們我們添加一個(gè),在外面的 location 中添加吧,盡量還是不動(dòng)這個(gè)默認(rèn)的 fastcgi_params 配置文件。需要修改哪個(gè)值的話(huà)也可以通過(guò)前后順序覆蓋修改。一定要修改原始的這個(gè) fastcgi_params 文件也可以,因?yàn)槟J(rèn)還有一個(gè) fastcgi_params.default 文件會(huì)在它的同級(jí)目錄中,如果沒(méi)有這個(gè)文件的話(huà),記得備份一下哦。
大小寫(xiě)沒(méi)事,普通變量的命名規(guī)則就好了。然后在 php 文件中打印
之前在講命令行時(shí),我們就講過(guò),如果是命令行運(yùn)行 php 文件打印的 另外還要注意的一點(diǎn)是,header 頭里的,在 PHP 的 在默認(rèn)的配置中,還有一個(gè) if_not_empty 的可選參數(shù),用于表示如果值不存在,就傳送到 CGI 程序中。上面的例子中,我們沒(méi)有開(kāi)啟 HTTPS 訪問(wèn),所以在 PHP 中,HTTPS 也不會(huì)在 總結(jié)今天的內(nèi)容很短,但是最基礎(chǔ)的 FastCGI 的配置我們都學(xué)習(xí)到了。其實(shí)到現(xiàn)在,一個(gè)正常的動(dòng)態(tài) LNMP 架構(gòu)中的 N 和 P 部分就已經(jīng)搭建完成了。使用 Nginx 來(lái)搭建 PHP 環(huán)境是不是非常地簡(jiǎn)單方便,這也是 PHP 在之前的 Web2.0 時(shí)代能夠大行其道的原因。整個(gè) LNMP 環(huán)境都不是特別復(fù)雜,而且還有很多一鍵安裝以及面板工具,能夠幫助我們?cè)诜址昼妰?nèi)就搭建起整個(gè)線上或者開(kāi)發(fā)環(huán)境。 除了 FastCGI 之外 ,Nginx 還提供了 uwsgi ,也就是 Python 以及 Python 框架常用的一類(lèi)通訊協(xié)議。PHP 也可以實(shí)現(xiàn)通過(guò) uwsgi 與 Nginx 聯(lián)通,但是,多此一舉嘛,正常情況下也沒(méi)人這么干,PHP-FPM 提供的 FastCGI 已經(jīng)是事實(shí)標(biāo)配了。如果硬要玩的話(huà),需要安裝額外的操作系統(tǒng)擴(kuò)展以及環(huán)境支持,還要學(xué)習(xí) uwsgi 相關(guān)的知識(shí)。因此,在 HTTP 模塊中,我們就不特意再去學(xué)習(xí) uwsgi 相關(guān)模塊的配置指令了,畢竟咱們是標(biāo)準(zhǔn)的 PHPer 。(它的指令和 FastCGI 的非常相似,功能也是大同小異) 此外,還有一個(gè) scgi 模塊也不單獨(dú)寫(xiě)了,都是差不多的。 FastCGI 相關(guān)的配置指令還有很多,我們接下來(lái)還要繼續(xù)學(xué)習(xí),這時(shí)候可不要隨便切換頻道啦,一起繼續(xù)前進(jìn)吧! 參考文檔: http:///en/docs/http/ngx_http_fastcgi_module.html |
|
來(lái)自: 硬核項(xiàng)目經(jīng)理 > 《待分類(lèi)》