目錄
#什麼是FastCGI
Nginx FastCGI運作原理
spawn-fcgi與PHP-FPM
PHP與PHP-FPM安裝與最佳化
下載安裝套件
設定安裝環境
編譯安裝php和php-fpm
配置與最佳化php-fpm
管理FastCGI進程
查看FastCGI进程
配置Nginx来支持PHP
配置实例
启动nginx
测试Nginx对PHP的解析功能
优化Nginx中FastCGI
首頁 後端開發 PHP問題 FastCGI怎麼安裝PHP

FastCGI怎麼安裝PHP

Jan 21, 2022 am 11:41 AM
fastcgi php

FastCGI安裝PHP的方法:1、下載php和php-fpm套件;2、設定安裝環境;3、編譯安裝php和php-fpm;4、透過「/usr/local/php/sbin /php-fpm start”啟動FastCGI進程即可。

FastCGI怎麼安裝PHP

本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦

FastCGI怎麼安裝PHP? Nginx與PHP(FastCGI)的安裝、設定與最佳化

#什麼是FastCGI

#FastCGI是一種可伸縮的、高速的在HTTP server和動態腳本語言間通訊的介面。 FastCGI也被眾多腳本語言支持,包括PHP。

FastCGI是從CGI發展而來的。 FastCGI介面方式採用C/S結構,可以將HTTP伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或多個腳本解析守護程式。

當HTTP伺服器每次遇到動態城區時,直接交付給FastCGI進程執行,然後返回結果給瀏覽器,提高了系統的整體效能。


Nginx FastCGI運作原理

Nginx並不支援對外部程式的直接呼叫或解析,所有外部程式都要透過FastCGI介面來呼叫。為了呼叫CGI程序,還需要一個FastCGI的wrapper,可以理解為用於啟動另一個程式的程式。

這個wrapper綁定在某個固定的socket上,如埠或檔案socket。當Nginx將CGI請求發送給socket時,透過FastCGI接口,wrapper接收到請求,派生一個新的線程,此線程調用解釋器或外部程序處理腳本並讀取返回數據,接著wrapper將返回數據通過FastCGI接口傳給Nginx,最後Nginx再回傳給客戶端。


spawn-fcgi與PHP-FPM

FastCGI介面在腳本解析伺服器上啟動一個或多個守護程序動態解析腳本,這也成為FastCGI進程管理器,spawn- fcgi與PHP-FPM就是兩個流程管理器。

spawn-fcgi:是HTTP伺服器lighttpd的一部分,目前已是獨立成為一個項目,一般與lighttpd配合使用來支援PHP。但是spawn-fcgi在高並發的時候會出現記憶體洩漏甚至自動重啟FastCGI。

PHP-FPM:第三方的FastCGI進程管理器,它是作為PHP的一個修補程式來開發的。在安裝過程中也需要和PHP原始碼一起編譯,也就是說PHP-FPM被編譯到PHP內核,因此效能方面更加優秀。同時其處理高並發方面能力也好很多。

因為FastCGI的優點是把動態語言和HTTP server分離開,所以Nginx與PHP/PHP-FPM經常被部署到不通的伺服器上,以分擔Nginx前端的壓力,使Nginx專注處理靜態請求,PHP/PHP-FPM解析PHP動態請求。


PHP與PHP-FPM安裝與最佳化

下載安裝套件

下載php套件:www.php.net,這裡使用php-5.2.13. tar.gz

下載php-fpm套件:php-fpm.org,這裡使用php-5.2.13-fpm-0.5.13.diff.gz

#注意:最好php和php-fpm版本一致,否則可能會出現相容性問題。

設定安裝環境

所需的依賴套件包含:

gcc gcc-c libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel等

根據系統版本的不同,可能依賴的套件也不同。

編譯安裝php和php-fpm

解壓縮php的源碼包並將php-fpm當做補丁打入php源碼。

tar zxf php-5.2.13.tar.gzgzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1
登入後複製

編譯安裝,同時啟動對FastCGI的支持,啟動對FastCGI模式的fpm的支援。

cd php-5.2.13./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpmmake && make install
cp php-ini-dist /usr/local/php/lib/php.ini
登入後複製

配置與最佳化php-fpm

php的主設定檔為php.ini;

php-fpm的主設定檔為php-fpm.conf,位於/usr/local/php/etc/下,是一個xml格式的文件,下面介紹幾個常用的標籤:

<value name="listen_address">127.0.0.1:9000</value>:表示配置FastCGI进程监听的IP地址和端口,默认为本地的9000;
<value name="display_errors">0</value>:表示是否显示php错误信息,默认为0表示不显示,设置为1表示显示错误信息;
<value name="user">nobody</value>:表示设置运行FastCGI进程的用户,需要和nginx配置文件中的用户一致;
<value name="group">nobody</value>:表示设置运行FastCGI进程的用户组,需要和nginx配置文件中的用户组一致;
<value name="max_children">5</value>:设置FastCGI的进程数,官方建议小于2G内存,可以只开启64个进程;4G以上可以开启200个进程;
<value name="request_terminate_timeout">0s</value>:设置FastCGI执行脚本的时间,默认0s,意味着无限执行下去;
<value name="rlimit_files">1024</value>:设置php-fpm打开文件描述符的限制,默认1024,这个值最好要和内核打开的文件数一致;
<value name="max_requests">500</value>:设置每一个进程最多处理多少个请求后会被关闭,默认500;
<value name="allowed_clients">127.0.0.1</value>:设置允许访问FastCGI进程解析器的IP地址,如果不设置IP地址,则无法接受nginx传来的php解析请求;
登入後複製

管理FastCGI進程

啟動FastCGI進程的方法如下:

/usr/local/php/sbin/php-fpm start
登入後複製

參數的意義如下:

start:啟動php的fastcgi進程;
stop:強制停止php的fastcgi進程;
quit:平滑終止php的fastcgi進程;
restart: 重新啟動php的fastcgi進程;
reload:重新載入php的fastcgi進程,使進程不中斷地載入設定檔;
logrotate:重新啟用log檔;

查看FastCGI进程

FastCGI进程启动后,可以通过命令“ps”或者“netstat”查看到相关进程信息,默认监听9000端口;

netstat -antlp | grep 9000ps -ef | grep php-cgi
登入後複製

配置Nginx来支持PHP

Nginx本身不会对PHP进行解析,要想让Nginx解析PHP请求,需要将PHP页面的请求交给FastCGI进程监听的IP地址和端口。Nginx通过反向代理的功能实现对PHP的解析。下面对Nginx解析PHP进行配置实例。

配置实例

      server {
        server_name www.ixdba.net ixdba.net;

        location / {
            index index.html index.php;
            root /web/www/www.ixdba.net;
        }

        location ~ \.php$ {
            root                html;
            fastcgi_pass        127.0.0.1:9000;
            fastcgi_index       index.php;
            fastcgi_param       SCRIPT_FILENAME  html$fastcgi_script_name;
            include             fastcgi_params;
        }
      }
登入後複製

location指令,将以“.php”结尾的文件都交给“127.0.0.1:9000”来处理,这里的IP和端口就是FastCGI进程监听的IP和端口。

fastcgi_param指令,指定放置php动态程序的主目录,也就是$fastcgi_script_name前的路径,这里是/usr/local/nginx/html。

fastcgi_params文件是FastCGI进程的一个参数配置文件,安装Nginx后默认生成,这里将它包含进来。

启动nginx

/usr/local/nginx/sbin/nginx
登入後複製

测试Nginx对PHP的解析功能

在/usr/local/nginx/html,也就是上面的php动态程序主目录下,创建一个phpinfo.php文件,内容如下:

<?php phpinfo(); ?>
登入後複製

然后通过浏览器访问http://www.ixdba.net/index.html,将会显示Nginx欢迎页;
浏览器访问http://www.ixdba.net/phpinfo.php,会出现php安装及功能列表信息;


优化Nginx中FastCGI

添加一些优化指令可以让php环境高效稳定的运行,下面给出一些实例,添加到nginx配置文件的http层级:

为fastcgi缓存指定文件路径,目录结构等级、关键字区域存储时间和非活动删除时间;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=Test:10m inactive=5m;
登入後複製

连接到后端fastcgi的超时时间;

fastcgi_connect_timeout 300;
登入後複製

向fastcgi传送请求的超时时间,是已经完成两次握手后向fastcgi传送请求的超时时间;

fastcgi_send_timeout 300;
登入後複製

接收fastcgi应答的超时时间,是已经完成两次握手后接收fastcgi应答的超时时间;

fastcgi_read_timeout 300;
登入後複製

读取fastcgi应答第一部分需要缓冲区的大小;

fastcgi_buffer_size 64k;
登入後複製

本地需要多少和多大的缓冲区来缓冲fastcgi的应答请求;

fastcgi_buffers 4 64k;
登入後複製

默认值为fastcgi_buffers的两倍;

fastcgi_busy_buffers_size 128k;
登入後複製

写入缓存文件时使用多大的数据块,默认为fastcgi_buffers的两倍;

fastcgi_temp_file_write_size 128k;
登入後複製

开启fastcgi缓存并为其指定一个名称,可以有效降低cpu负载,防止502错误。

fastcgi_cache TEST;
登入後複製

fastcgi_cache_valid指定应答代码的缓存时间。
将200, 302的应答时间缓存1小时;

fastcgi_cache_valid 200 302 1h;
登入後複製

将301应答缓存一天;

fastcgi_cache_valid 301 1d;
登入後複製

其余应答缓存1分钟;

fastcgi_cache_valid any 1m;
登入後複製

   

以上是FastCGI怎麼安裝PHP的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

See all articles