當前位置:首頁 » 編程語言 » nginx處理php

nginx處理php

發布時間: 2023-10-13 22:54:38

『壹』 nginx配置支持php

nginx本身不支持php解析,需要配合php-fpm來配置。

location~.php${
root/var/www;#指定php的根目錄
fastcgi_pass127.0.0.1:9000;#php-fpm的默認埠是9000
fastcgi_indexindex.php;
fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;
includefastcgi_params;
}

centos下安裝php-fpm (php及其它組件已經安裝過的情況)

yuminstallphp-fpm

啟動php-fpm 並設置開機啟動 (centos 7)

systemctlstartphp-fpm
systemctlenablephp-fpm

『貳』 跟我學Nginx,nginx 如何處理請求

基於名稱(指 HTTP 請求頭 Host 欄位)的虛擬伺服器指通過 HTTP 請求頭的 Host 來決定客戶端請求由哪個 server 進行處理。

讓我們從一個簡單的配置開始,下面配置了三個虛擬伺服器,它們均偵聽 80 埠 :

上面配置中,nginx 僅測試請求的頭欄位「Host」以確定應將請求路由到哪個 server。如果「Host」的值與任何 server 名稱都不匹配,或者請求根本不包含「Host」頭欄位,則 nginx 會將請求路由到此埠的默認 server。

上面的配置中,默認 server 是第一個 —— 這是 nginx 的標准默認行為。還可以使用 listen 指令中的 default_server 參數明確設置哪個 server 應該是默認 server:

如果不允許處理沒有「Host」頭欄位的客戶端請求(反過來說,只處理帶有 Host 頭欄位的客戶端請求),可以定義一個只丟棄請求的 server:

在這里,server_name 設置為一個空字元串,它將匹配沒有「Host」頭欄位的請求,並返回一個特殊的 nginx 非標准代碼 444 來關閉連接。

讓我們看一個更復雜的配置,其中一些虛擬伺服器偵聽不同的地址:

上面配置中,nginx 首先根據 server 塊的 listen 指令測試請求的 IP 地址和埠。然後,它根據與 IP 地址和埠匹配的 server 塊的 server_name 條目測試請求的「Host」標頭欄位。如果未找到伺服器名稱,則請求將由默認伺服器處理。例如,在 192.168.1.1:80 埠上收到的 www.example.com 請求將由 192.168.1.1:80 埠的默認伺服器處理,即由第一個伺服器處理,因為沒有 www.example .com 為此埠定義。

如前所述,默認伺服器是監聽埠的一個屬性,可以為不同的埠定義不同的默認伺服器:

現在讓我們看看 nginx 如何選擇一個位置來處理一個典型的、簡單的 PHP 站點的請求:

無論列出的順序如何,nginx 首先搜索由文字字元串給出的最具體的前綴位置。在上面的配置中,唯一的前綴位置是「/」,並且由於它匹配任何請求,因此將用作最後的手段。然後 nginx 按照配置文件中列出的順序檢查正則表達式給出的位置。第一個匹配的表達式停止搜索,nginx 將使用這個位置。如果沒有正則表達式匹配請求,則 nginx 使用之前找到的最具體的前綴位置。

注意: 所有類型的位置僅測試不帶參數的請求行的 URI 部分。這樣做是因為查詢字元串中的參數可以通過多種方式給出,例如:

此外,任何人都可以在查詢字元串中請求任何內容:

現在讓我們看看在上面的配置中如何處理請求:

『叄』 php和nginx之間是如何工作的

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接收到一個http請求時,通過配置文件找到對應的server。然後匹配server中的所有location,找到最匹配的。而在location中的命令會啟動不同的模塊去完成工作,比如rewrite模塊、index模塊。因此在nginx中模塊可以看作真正的勞動工作者。nginx的模塊是被編譯到nginx中的,屬於靜態方式。啟動nginx時,模塊被自動載入。

『肆』 Nginx運行原理和配置詳解(個人總結筆記)

話不多說,擼起鍵盤就是干!正所謂知其然知其所以然,個人總結了下Nginx運行原理和配置詳解,便於理解和後續復盤。

先來看這一張圖。

nginx啟動後會有 一個master進程和多個worker進程 。master進程用來管理worker進程, 一個worker進程處理一個請求 ,一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。 worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致 ,這裡面的原因與nginx的進程模型以及事件處理模型是分不開的 ,過多的worker數,只會導致進程來競爭cpu資源,從而帶來不必要的上下文切換。

PHP WEB伺服器目前最佳方式之一就是: Nginx + FastCGI(解決CGI並發重復fork問題) + PHP-FPM(管理PHP-CGI進程) 。nginx是怎麼做到把請求拋給PHP解釋來處理的呢?這個過程又是怎麼實現的呢?稍後我們來看一下參數配置。

代理,反向代理,負載均衡是Nginx常用功能。

Http代理,反向代理:作為web伺服器最常用的功能之一,尤其是反向代理。如果你和小馬之前一樣還是分不清代理和反向代理的區別,下面這個圖對理解會有所幫助。

它們的區別就是,前者知道我要找的人並知道地址在哪,代理伺服器按這個地址代為請求一下然後把他說的話返回給我。後者就是,我知道我要找誰問話但不知道地址在哪,我也不想管,代理服務你自己去找,只要幫我返回他要說的話就可以了。

負載均衡:其實也是 反向代理 的一種。負載均衡,熱備等等其實都屬於高可用范疇,Nginx提供的負載均衡策略有2種:內置策略和擴展策略。內置策略為 輪詢,加權輪詢,Ip hash 等等。擴展策略,就天馬行空,只有你想不到的沒有他做不到的啦,你可以參照所有的負載均衡演算法,給他做下實現。思考一個問題,IP hash真的能解決session共享的問題么?

我們來簡單看下兩個 配置示例 。

這個配置將請求轉發轉向mysvr 定義的伺服器列表。 注意proxy_pass配置。其實這塊也是負載均衡的配置 。如下:

訪問網站時,由於配置了proxy_pass地址,所有請求都會先通過nginx反向代理伺服器,在伺服器將請求轉發給目的主機時,讀取upstream為 tomcatsever1的地址,讀取分發策略,配置tomcat1權重為3,所以nginx會將大部分請求發送給49伺服器上的tomcat1,也就是8080埠;較少部分給tomcat2來實現有條件的負載均衡,當然這個條件就是伺服器1、2的硬體指數處理請求能力。

負載均衡配置 還有其他的相關參數,這是只是打個樣,不贅述。

可以認為fastcgi_pass這個配置非常關鍵,將Nginx + FastCGI + PHP-FPM串連 。這個配置將PHP請求都交給 fastcgi_pass配置的PHP-FPM處理。 location分別通過正則過濾和轉發配置決定了各個請求URL將要轉發交與的處理方式 ,location /表示默認請求,location  ~\.php(.*)$ 表示PHP 腳本請求全部轉發到 FastCGI處理。 使用FastCGI默認配置.。

以上配置指定了這些 靜態文件要nginx自己處理 。

NGINX負載均衡可以用於很多服務負載均衡的實現,比如做Redis服務的負載均衡,配置upstream的IP列表再配置 proxy_pass 代理即可。那要實現負載均衡除了NGINX,還有哪些呢?

根據7層OSI模型可將負載均衡分為 :

1)二層負載均衡(一般是用虛擬mac地址方式,外部對虛擬MAC地址請求,負載均衡接收後分配後端實際的MAC地址響應);

2)三層負載均衡(一般採用虛擬IP地址方式,外部對虛擬的ip地址請求,負載均衡接收後分配後端實際的IP地址響應);

3)四層負載均衡(在三次負載均衡的基礎上,用 ip+port 接收請求,再轉發到對應的機器);

4)七層負載均衡(根據虛擬的url或是IP,主機名接收請求,再轉向相應的處理伺服器)。

這其中,最常見的是四層和七層負載均衡。思考一下,NGINX的負載均衡是屬於哪一種?

關於負載均衡的架構

『伍』 怎麼在nginx中運行php文件

nginx本身不能處理php,它只是個web伺服器,當接收到請求後,如果是php請求,則發給php解釋器處理,並把結果返回給客戶端。
nginx一般是把請求發fastcgi管理進程處理,fascgi管理進程選擇cgi子進程處理結果並返回給nginx本文以php-fpm為例介紹如何使nginx支持php.

熱點內容
c語言稀疏矩陣轉置矩陣 發布:2025-02-01 03:47:57 瀏覽:530
坦克世界掛機腳本有哪些 發布:2025-02-01 03:07:41 瀏覽:133
串口編程at 發布:2025-02-01 03:06:05 瀏覽:908
合資汽車配置有什麼 發布:2025-02-01 02:56:07 瀏覽:78
wifi共享精靈源碼 發布:2025-02-01 02:40:15 瀏覽:973
java軟體怎麼安裝 發布:2025-02-01 02:40:09 瀏覽:549
河北稅務局電子密碼是什麼 發布:2025-02-01 02:40:07 瀏覽:835
檢查伺服器設置是什麼意思 發布:2025-02-01 02:31:26 瀏覽:185
神偷四第四章密碼是多少 發布:2025-02-01 02:07:29 瀏覽:13
qq登錄在哪個文件夾 發布:2025-02-01 01:57:59 瀏覽:627