Nginx如何呼叫php

2021-10-25 10:40:29 字數 3733 閱讀 2832

1.cgi

cgi 是web 伺服器執行時外部程式的規範介面,按cgi 編寫的程式可以擴充套件伺服器功能。cgi 應用程式能與瀏覽器進行互動,還可通過資料庫api 與資料庫伺服器等外部資料來源進行通訊,從資料庫伺服器中獲取資料。格式化為html文件後,傳送給瀏覽器,也可以將從瀏覽器獲得的資料放到資料庫中。幾乎所有伺服器都支援cgi,可用任何語言編寫cgi。

傳統cgi介面方式的主要缺點是效能很差,因為每次http伺服器遇到動態程式時都需要重新啟動指令碼解析器來執行解析,然後將結果返回給http伺服器。這在處理高併發訪問時幾乎是不可用的,另外傳統的cgi介面方式安全性也很差,現在已經很少使用了。

2.fastcgi

fastcgi是乙個可伸縮地、高速地在http server和動態指令碼語言間通訊的介面。多數流行的http server都支援fastcgi,包括apache、nginx和lighttpd等。同時fastcgi也被許多指令碼語言支援,其中就有php。fastcgi是從cgi發展改進而來的。

fastcgi介面方式採用c/s結構,可以將http伺服器和指令碼解析伺服器分開,同時在指令碼解析伺服器上啟動乙個或者多個指令碼解析守護程序。當http伺服器每次遇到動態程式時,可以將其直接交付給fastcgi程序來執行,然後將得到的結果返回給瀏覽器。

這種方式的優點:可以讓http伺服器專一地處理靜態請求或者將動態指令碼伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的效能。

php-fpm是管理fastcgi的乙個管理器,它作為php的外掛程式存在,在安裝php要想使用php-fpm時在老php的老版本(php5.3.3之前)就需要把php-fpm以補丁的形式安裝到php中,而且php要與php-fpm版本一致,這是必須的)

php-fpm其實是php源**的乙個補丁,旨在將fastcgi程序管理整合進php包中。必須將它patch到你的php源**中,在編譯安裝php後才可以使用。

php5.3.3已經整合php-fpm了,不再是第三方的包了。php-fpm提供了更好的php程序管理方式,可以有效控制記憶體和程序、可以平滑過載php配置,比spawn-fcgi具有更多優點,所以被php官方收錄了。

1)、fastcgi程序管理器php-fpm自身初始化,啟動主程序php-fpm和啟動start_servers個cgi 子程序。主程序php-fpm主要是管理fastcgi子程序,監聽9000埠。fastcgi子程序等待來自web server的連線。

2)、當客戶端請求到達web server nginx時,nginx通過location指令,將所有以php為字尾的檔案都交給127.0.0.1:9000來處理,即nginx通過location指令,將所有以php為字尾的檔案都交給127.0.0.1:9000來處理。

3)fastcgi程序管理器php-fpm選擇並連線到乙個子程序cgi直譯器。web server將cgi環境變數和標準輸入傳送到fastcgi子程序。

4)、fastcgi子程序完成處理後將標準輸出和錯誤資訊從同一連線返回web server。當fastcgi子程序關閉連線時,請求便告處理完成。

5)、fastcgi子程序接著等待並處理來自fastcgi程序管理器(執行在 webserver中)的下乙個連線。

簡單來說,當需要處理php請求時,nginx的worker程序會將請求移交給php-fpm的worker程序進行處理,其實嚴格得講是nginx間接呼叫php。

主要有三個配置檔案,

1.虛擬主機server的配置

server    

#當請求**下php檔案的時候,反向**到php-fpm

location ~ \.php$

}

2.fastcgi.conf的配置,這個配置主要用來把nginx中的變數,解釋為php能夠理解的變數:

fastcgi_param redirect_status 200;3.php-fpm.conf的配置,主要看監聽的伺服器ip和埠

listen = 127.0.0.1:9000
nginx和php-fpm的程序間通訊有兩種方式

其中tcp是ip加埠,可以跨伺服器。而unix domain socket不經過網路,只能用於nginx跟php-fpm都在同一伺服器的場景。

用哪種取決於你的php-fpm配置:

方式1:

php-fpm.conf:

listen = 127.0.0.1:9000

nginx.conf:

fastcgi_pass 127.0.0.1:9000

方式2:

php-fpm.conf:

listen = /tmp/php-fpm.sock

nginx.conf:

fastcgi_pass unix:/tmp/php-fpm.sock;

其中php-fpm.sock是乙個檔案,由php-fpm生成。

unix domain socket可用於兩個沒有親緣關係的程序,是目前廣泛使用的ipc機制,比如x window伺服器和gui程式之間就是通過unix domain socket通訊的。這種通訊方式是發生在系統核心裡而不會在網路裡傳播。

在php頁面如何呼叫介面,php如何呼叫api介面

通過php模擬post請求即可呼叫。推薦 php伺服器 php模擬post提交的2種方法 1 通過curl函式 php中使用curl實現get和post請求的方法 post data array post data clientname test08 post data clientpasswd t...

php怎麼呼叫,php如何呼叫指定檔案

php 中的 include require 函式可以呼叫其他php生成的內容,一般來說include 或 require 語句會獲取指定檔案中存在的所有文字 標記,並複製到使用 include 語句的檔案中。通過 include 或 require 語句,可以將 php 檔案的內容插入另乙個 ph...

PHP如何呼叫webservice

最近工作中需要用php呼叫web service介面,對php不熟,上網搜搜,發現關於用php呼叫web service的文章也不多,不少還是php4裡用nusoap這個模組呼叫的方法,其實php5裡已經包含了處理soap的模組,但是資料太少了,上php官網上查幫助,寫的不是很容易理解,經過多次實踐...