首页 php教程 php手册 编译PHP并与Ngnix整合

编译PHP并与Ngnix整合

Jun 06, 2016 pm 07:40 PM
nginx php 不能 整合 编译

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx 一、首先我们先初步认识下FastCGI和N

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

一、首先我们先初步认识下FastCGI和Ngnix+FastCGI的运行原理

    1、apache+PHP和ngnix+php的区别

      apache一般是把php当做自己的一个模块来启动;而ngnix则是把http请求变量转发给php进程,即php独立进程,与ngnix通信,这种方式叫做FastCGI运行方式。

      所以,apache所编译的php不能用于ngnix。

    先看一个简单的图:

  编译PHP并与Ngnix整合

  以下这段我认为是在网络上找到的最通俗易懂的解释,我将它复制进来方便大家理解:

  1、什么是FastCGI呢?

    FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

    FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后将结果返回给HTTP服务器。这在处理高并发访问时几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少使用了。

    FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

  2、Nginx+FastCGI运行原理 

    Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

    wrapper: 为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+FastCGI的整个运作过程,

    编译PHP并与Ngnix整合

  所以,我们首先需要一个wrapper,这个wrapper需要完成的工作:

  1. 通过调用fastcgi(库)的函数通过socket和ningx通信(读写socket是fastcgi内部实现的功能,对wrapper是非透明的)
  2. 调度thread,进行fork和kill
  3. 和application(php)进行通信

二、编译PHP

  首先我们先认识一个概念:php-fpm

    (1)PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到

     (2)PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用

     (3)新版的PHP已经集成了php-fpm,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM

  接下来我们开始安装编译PHP

  1、编译前我们需要先安装一些php需要用到的库(我用的是centos版本的linux系统)

    yum -y install gcc automake autoconf libtool make

    yum -y install gcc gcc-c++ glibc

    yum -y install libmcrypt-devel mhash-devel libxslt-devel \

    libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \

    zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \

    ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \

    krb5 krb5-devel libidn libidn-devel openssl openssl-devel

 

   2、获取php源码包

    wget http://cn2.php.net/distributions/php-5.4.7.tar.gz

 

   3、解压并进入php目录

    tar zvxf php-5.4.7.tar.gz

    cd php-5.4.7

    编译PHP并与Ngnix整合

 

 

   4、编译并安装

    ./configure --prefix=/usr/local/fastphp --enable-fpm --with-mcrypt \

    --enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \

    --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \

    --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \

    --with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \

    --with-gd --with-jpeg-dir

  

    make all install

 

<span>  <span>5、将php-fpm复制一份<br>  <img  src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog2015%2F649054%2F201503%2F071448091955235.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fit-cen%2Fp%2F4320261.html" class="lazy" alt="编译PHP并与Ngnix整合" ><br><br>  6、将php配置文件复制一份<br>  <img  src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog2015%2F649054%2F201503%2F071448491642580.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fit-cen%2Fp%2F4320261.html" class="lazy" alt="编译PHP并与Ngnix整合" ><br><br>  7、修改nginx配置文件以支持php-fpm<br>    首先打开ngnix配置文件<br>      <span>vim /usr/local/ngnix/conf/ngnix.conf<br>    <span>在server段里加入以下代码<br>    <img  src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog2015%2F649054%2F201503%2F071453122748660.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fit-cen%2Fp%2F4320261.html" class="lazy" alt="编译PHP并与Ngnix整合" ><br>    保存<br><br>  8、启动php-fpm和ngnix<br>    <span>/usr/local/ngnix</span><br><span>    /usr/local/ngnix/sbin/php-fpm<br><br>  <span>9、在根目录下创建测试文件test.php做个简单的测试</span><br>    <img  src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog2015%2F649054%2F201503%2F071457441021206.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fit-cen%2Fp%2F4320261.html" class="lazy" alt="编译PHP并与Ngnix整合" ><br><br>  <span>10、测试成功<br>    <img  src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimages.cnitblog.com%2Fblog2015%2F649054%2F201503%2F071459013052992.png&refer=http%3A%2F%2Fwww.cnblogs.com%2Fit-cen%2Fp%2F4320261.html" class="lazy" alt="编译PHP并与Ngnix整合" ><br><br><br><br>php-fpm的关闭和重启需要使用信号控制,其实就跟ngnix的关闭重启一样<br>  php-fpm 关闭:<span>kill -INT `cat /usr/local/fastphp/var/run/php-fpm.pid`</span><br>  php-fpm 重启:<span>kill -USR2 `cat /usr/local/fastphp/var/run/php-fpm.pid`<br></span>  查看php-fpm进程数:<span>ps aux | grep -c php-fpm<br><br></span><br><strong>Ngnix的安装请查看我的另一篇博文</strong><br>  http://www.cnblogs.com/it-cen/p/4310050.html<br><br>  <br><br><br></span></span></span></span></span></span>
登录后复制

  如果您觉得您能在此博文学到了新知识,请为我顶一个,如文章中有解释错的地方,欢迎指出。

  互相学习,共同进步!

<span><span><span><span><span>   </span></span></span></span><br></span>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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)

PHP的目的:构建动态网站 PHP的目的:构建动态网站 Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP:处理数据库和服务器端逻辑 PHP:处理数据库和服务器端逻辑 Apr 15, 2025 am 12:15 AM

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

nginx怎么配置云服务器域名 nginx怎么配置云服务器域名 Apr 14, 2025 pm 12:18 PM

在云服务器上配置 Nginx 域名的方法:创建 A 记录,指向云服务器的公共 IP 地址。在 Nginx 配置文件中添加虚拟主机块,指定侦听端口、域名和网站根目录。重启 Nginx 以应用更改。访问域名测试配置。其他注意事项:安装 SSL 证书启用 HTTPS、确保防火墙允许 80 端口流量、等待 DNS 解析生效。

nginx怎么查版本 nginx怎么查版本 Apr 14, 2025 am 11:57 AM

可以查询 Nginx 版本的方法有:使用 nginx -v 命令;查看 nginx.conf 文件中的 version 指令;打开 Nginx 错误页,查看页面的标题。

怎么启动nginx服务器 怎么启动nginx服务器 Apr 14, 2025 pm 12:27 PM

启动 Nginx 服务器需要按照不同操作系统采取不同的步骤:Linux/Unix 系统:安装 Nginx 软件包(例如使用 apt-get 或 yum)。使用 systemctl 启动 Nginx 服务(例如 sudo systemctl start nginx)。Windows 系统:下载并安装 Windows 二进制文件。使用 nginx.exe 可执行文件启动 Nginx(例如 nginx.exe -c conf\nginx.conf)。无论使用哪种操作系统,您都可以通过访问服务器 IP

PHP:服务器端脚本语言的简介 PHP:服务器端脚本语言的简介 Apr 16, 2025 am 12:18 AM

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

docker容器名称怎么查 docker容器名称怎么查 Apr 15, 2025 pm 12:21 PM

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。

See all articles