国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【Nginx19】Nginx學(xué)習(xí):FastCGI模塊(一)基礎(chǔ)配置

Nginx學(xué)習(xí):FastCGI模塊(一)基礎(chǔ)配置

萬眾矚目啊,總算到 FastCGI 了??次椅恼潞鸵曨l的各位大佬們8成以上都是 PHPer 吧,要做 PHP ,F(xiàn)astCGI 的配置就少不了。CGI 、FastCGI 、PHP-FPM 這些概念,咱們在很早之前的 了解PHP-FPMhttps://mp.weixin.qq.com/s/NUpDnfYfbPuWmal4Am3lsg 這篇文章中就學(xué)習(xí)過了。不記得的小伙伴可以回去看下哦,如果感覺說得太簡單了,大家還可以去自己搜索一下相關(guān)的資料。

FastCGI 模塊的全稱是 ngx_http_fastcgi_module ,包含在核心源碼中,不需要單獨編譯了。

基本配置

還是拿我們在 HTTP 核心模塊中第一篇文章中的例子來說。最簡單的配置就是下面這樣。

location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;
}

沒錯,就這么簡單的幾個配置,我們后面會一一說明它們的作用。標(biāo)準(zhǔn)的連接 PHP-FPM 就是這么簡單,但是,CGI 是通用網(wǎng)關(guān)接口,因此,不僅僅是 PHP ,Python、Java、C++ 之類的任何語言,只要是實現(xiàn)了 FastCGI 接口,那么他們都可以通過這種形式與 Nginx 進(jìn)行交互。并且 FastCGI 也提供這些語言的 API ,只不過我對這些語言不熟悉,而且大部分情況下,使用 Nginx 的 FastCGI 都是和 PHP 打配合的,因此,咱們也就不多贅述了。有興趣,并且精通這些語言的小伙伴可以自己找資料調(diào)試一下哦。

接下來,我們今天就先看看上面這個配置中的這三條配置指令是干嘛的。

fastcgi_pass

設(shè)置 FastCGI 服務(wù)器的地址。

fastcgi_pass address;

沒有默認(rèn)值,也可以將這個配置項當(dāng)做是 FastCGI 的開關(guān)。它只能配置在 location 子模塊中,也就是說,必須是指定路徑的或者條件的 location 才能使用 FastCGI 。

它的參數(shù)就一個,之前我們就學(xué)習(xí)過,可以使用 127.0.0.1:9000 這種端口形式的,也可以使用 unix:/var/sock/php-fpm/www.sock 這種形式。在開頭 PHP-FPM 的文章中有過詳細(xì)的說明。一般來說,本機(jī)使用,肯定是 UnixSocket 這種形式更好啦,畢竟不需要再走連接請求了。而且一般也很少人會把 Nginx 和 PHP-FPM 分開放,即使是做負(fù)載均衡,也是直接代理到每臺主機(jī)的 Nginx 端口上。因此,建議本機(jī)的 Nginx+PHP 組合盡量都走 UnixSocket 。

另外,這個服務(wù)器地址也可以是一組服務(wù)器,會以循環(huán)的方式請求,類似于默認(rèn)的負(fù)載均衡配置,不過還是那句話,很少有人這么玩。詳細(xì)的負(fù)載均衡 upstream 模塊我們后面也會學(xué)到,主要還是看那邊的吧。

地址參數(shù)還可以包含變量,并且如果地址被指定為域名,則在所描述的服務(wù)器組中搜索該名稱,如果沒有找到,則使用解析器來確定。

fastcgi_index

 $fastcgi_script_name 變量的值中設(shè)置將附加在以斜杠結(jié)尾的 URI 之后的文件名。

fastcgi_index name;

其實和大家最常見的那個 index 是一樣的,只不過 index 是拼接到 root 或者 alias 路徑的后面,而這個配置,則是將指定的默認(rèn)文件拼接到以斜杠結(jié)尾的 $fastcgi_script_name 變量的后面。這個變量又是哪里來的呢?它呀,就是 FastCGI 當(dāng)中的 $uri 變量,也就是我們的請求 URI 。

  • $fastcgi_script_name 請求 URI,如果 URI 以斜杠結(jié)尾,則請求帶有由 fastcgi_index 指令配置的索引文件名附加到它的 URI。此變量可用于設(shè)置確定 PHP 中腳本名稱的 SCRIPT_FILENAME 和 PATH_TRANSLATED 參數(shù)。比如說,我們請求配置一個 /php/ 路徑,加上上面的 FactCGI 配置。
location /php/ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /home/www/html1/php$fastcgi_script_name;
    include        fastcgi_params;
}

然后請求 /php/info/ ,那么實際訪問的就是 $fastcgi_script_name 也就是 /php/info/ ,完整的 SCRIPT_FILENAME 路徑就是 /home/www/html1/php/info/ ,最后拼上 fastcgi_index 的設(shè)置,它是針對 $fastcgi_script_name 的,因此實際 fastcgi_script_name 的內(nèi)容是 /php/info/index.php 。最終,完整的訪問到的文件就是 /home/www/html1/php/info/index.php 。

需要注意的是,如果我們訪問的是靜態(tài)頁面,那么還是會走 root 或者 alias 的,不會走到 FastCGI 配置的路徑中。而且,之前的文章也說過了,SCRIPT_FILENAME 指定的路徑需要是絕對路徑,這個也是容易配錯的地方。

fastcgi_param

設(shè)置應(yīng)傳遞給 FastCGI 服務(wù)器的參數(shù)。

fastcgi_param parameter value [if_not_empty];

沒有默認(rèn)值,但可以配置在 http、server、location 模塊中。它的 value 值可以包含文本、變量及其組合。當(dāng)且僅當(dāng)當(dāng)前級別上沒有定義 fastcgi_param 指令時,這些指令才從上級的配置級別繼承。一般來說,PHP 必須的主要是這兩個。

fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING    $query_string;

SCRIPT_FILENAME 不用多說,PHP-FPM 要執(zhí)行文件就要看它。但是我們的配置文件中沒有寫下面這個 QUERY_STRING 呀,注意哦,在我們的配置中,fastcgi_param 下面還 include 了一個文件。我們打開這個文件看看。

// vim /etc/nginx/fastcgi_params
fastcgi_param  QUERY_STRING       $query_string; #請求的參數(shù);如?app=123  
fastcgi_param  REQUEST_METHOD     $request_method; #請求的方法(GET,POST)  
fastcgi_param  CONTENT_TYPE       $content_type; #請求頭中的Content-Type字段  
fastcgi_param  CONTENT_LENGTH     $content_length; #請求頭中的Content-length字段

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; #腳本名稱
fastcgi_param  REQUEST_URI        $request_uri; #請求的地址不帶參數(shù)  
fastcgi_param  DOCUMENT_URI       $document_uri; #與$uri相同
fastcgi_param  DOCUMENT_ROOT      $document_root; #網(wǎng)站的根目錄。在server配置中root指令中指定的值
fastcgi_param  SERVER_PROTOCOL    $server_protocol; #請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1
fastcgi_param  REQUEST_SCHEME     $scheme; #請求協(xié)議 http/https
fastcgi_param  HTTPS              $https if_not_empty; # 是否使用 https

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; #cgi 版本  
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version; #nginx 版本號,可修改、隱藏

fastcgi_param  REMOTE_ADDR        $remote_addr; #客戶端IP  
fastcgi_param  REMOTE_PORT        $remote_port; #客戶端端口 
fastcgi_param  SERVER_ADDR        $server_addr; #服務(wù)器IP地址  
fastcgi_param  SERVER_PORT        $server_port; #服務(wù)器端口
fastcgi_param  SERVER_NAME        $server_name; #服務(wù)器名,域名在server配置中指定的server_name
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;  # 僅 PHP 可用,如果PHP編譯的時候使用了--enable-force-cgi-redirect 指令,REDIRECT_STATUS參數(shù)應(yīng)該傳輸200.


看到了吧,其實就是 Nginx 已經(jīng)幫我們準(zhǔn)備好了一堆配置。這些東西我們在 PHP 的 $_SERVER 中可以獲取到。比如我們我們添加一個,在外面的 location 中添加吧,盡量還是不動這個默認(rèn)的 fastcgi_params 配置文件。需要修改哪個值的話也可以通過前后順序覆蓋修改。一定要修改原始的這個 fastcgi_params 文件也可以,因為默認(rèn)還有一個 fastcgi_params.default 文件會在它的同級目錄中,如果沒有這個文件的話,記得備份一下哦。

location ~ \.php$ {
    ………………
    include        fastcgi_params;
    fastcgi_param os_PPP "zyblog"; # 新添加的
    fastcgi_param SERVER_SOFTWARE nnn; # 覆蓋掉原始的值 nginx/1.23.0 ,變成 nnn
}

大小寫沒事,普通變量的命名規(guī)則就好了。然后在 php 文件中打印 $_SERVER,就可以看到新配置的這個信息。

Array
(
………………
[os_PPP] => zyblog
………………
[SERVER_SOFTWARE] => nnn
………………
)

之前在講命令行時,我們就講過,如果是命令行運行 php 文件打印的 $_SERVER 和通過 phpcgi 以及 Nginx、Apache 打印的是不同的,這下知道這個 $_SERVER 里的參數(shù)是怎么來的了吧。

另外還要注意的一點是,header 頭里的,在 PHP 的 $_SERVER 中是以 HTTP_ 開頭的,同樣,Nginx 的 FastCGI 配置中也有單獨添加請求頭的,這個我們后面會學(xué)到。

在默認(rèn)的配置中,還有一個 if_not_empty 的可選參數(shù),用于表示如果值不存在,就傳送到 CGI 程序中。上面的例子中,我們沒有開啟 HTTPS 訪問,所以在 PHP 中,HTTPS 也不會在 $_SERVER 中顯示。

總結(jié)

今天的內(nèi)容很短,但是最基礎(chǔ)的 FastCGI 的配置我們都學(xué)習(xí)到了。其實到現(xiàn)在,一個正常的動態(tài) LNMP 架構(gòu)中的 N 和 P 部分就已經(jīng)搭建完成了。使用 Nginx 來搭建 PHP 環(huán)境是不是非常地簡單方便,這也是 PHP 在之前的 Web2.0 時代能夠大行其道的原因。整個 LNMP 環(huán)境都不是特別復(fù)雜,而且還有很多一鍵安裝以及面板工具,能夠幫助我們在分分鐘內(nèi)就搭建起整個線上或者開發(fā)環(huán)境。

除了 FastCGI 之外 ,Nginx 還提供了 uwsgi ,也就是 Python 以及 Python 框架常用的一類通訊協(xié)議。PHP 也可以實現(xiàn)通過 uwsgi 與 Nginx 聯(lián)通,但是,多此一舉嘛,正常情況下也沒人這么干,PHP-FPM 提供的 FastCGI 已經(jīng)是事實標(biāo)配了。如果硬要玩的話,需要安裝額外的操作系統(tǒng)擴(kuò)展以及環(huán)境支持,還要學(xué)習(xí) uwsgi 相關(guān)的知識。因此,在 HTTP 模塊中,我們就不特意再去學(xué)習(xí) uwsgi 相關(guān)模塊的配置指令了,畢竟咱們是標(biāo)準(zhǔn)的 PHPer 。(它的指令和 FastCGI 的非常相似,功能也是大同小異)

此外,還有一個 scgi 模塊也不單獨寫了,都是差不多的。

FastCGI 相關(guān)的配置指令還有很多,我們接下來還要繼續(xù)學(xué)習(xí),這時候可不要隨便切換頻道啦,一起繼續(xù)前進(jìn)吧!

參考文檔:

http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
yum方式下快速安裝php7.1
Add CGI support for Nginx
Nginx
nginx upstream 一致性哈希模塊
CentOS下搭建nginx+php環(huán)境
如何在CentOS/RHEL中安裝基于Web的監(jiān)控系統(tǒng) linux
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服