• Nginx 笔记与总结(10)Nginx 与 PHP 整合


    Apache + PHP 的编译 和 Nginx + PHP 的编译,区别:

    Apache 一般把 PHP 当作自己的一个模块来启动;

    Nginx 则是把 HTTP 请求变量(如 get,user_agent)转发给 PHP 独立进程,与 Nginx 进行通信,称为 fastcgi 运行方式。

    因此,为 Apache 所编译的 PHP 是不能用于 Nginx 的;为 Nginx 所编译的 PHP 要以 fpm(fastcgi,fastcgi 通俗地讲就是两个程序之间的通信)方式运行。

    进入 PHP 解压后的目录:

    cd /root/php-5.3.10
    

    重新编译,编译的目录要和已经为 Apache 编译的 PHP 目录区分开(可以命名为 fastcgiphp 或者 fastphp)

    配置

    ./configure --prefix=/usr/local/fastphp 
    --with-mysql=mysqlnd 
    --enable-mysqlnd 
    --with-gd 
    --enable-gd-native-ttf 
    --enable-gd-jis-conv 
    --enable-fpm
    

      

    配置完成:

    附:配置需要的选项可以通过  ./configure -help 命令来查找,例如

    php 以 fpm 方式运行可以通过:

    [root@localhost php-5.3.10]# ./configure --help|grep php-fpm
    

      

    [root@localhost php-5.3.10]# ./configure --help|grep fpm
    

      

    php 和 mysql 相关的选项可以通过:

    [root@localhost php-5.3.10]# ./configure -help|grep mysql
    

      

    mysqlnd 是 php mysql 的原生驱动目录。

    再如 安装 php 时还需要安装 gd 图形库:

    [root@localhost php-5.3.10]# ./configure -help|grep gd
    

     

    nginx 与 php 整合   

    在 Apache 中,php 是作为 apache 的一个模块存在的;而 nginx 和 php 则是两个平等的模块, php 占用 9000 端口,当 nginx 收到运行 php 的请求后,将请求信息转发给 9000 端口的 php进程,让 php 进程处理指定目录下的 php 文件,php 处理完后再返回给 nginx, nginx 再把响应返回给用户。因此在 nginx 的配置中,需要针对 .php 的文件进行一次转发,转发给 php 进程。

    【例】遇到 php 文件,把根目录定位到 html,把请求上下文转交给 9000 端口的 php 进程,并告诉 php 进程当前的脚本是 $document_root$fastcgi_scriptname,php 就会找到该脚本并处理

    编辑nginx 的配置文件 vim /usr/local/nginx/conf/nginx.conf :

    增加一段 location 信息

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

    $document_root 表示根目录;

    $fastcgi_script_name 表示请求的文件

    注意:这里的 root html 表示根目录(默认)是 /usr/local/nginx/html,所以在配置虚拟站点的时候需要配置正确的路径,例如虚拟站点的目录是 /usr/local/nginx/html/www.dee.com,那么就应该在配置文件中设置 root html/www.dee.com,否则当服务器找不到正确的路径时很可能会报 No input file specified.

    平滑重启 nginx。

      

    编译+安装 php

    [root@localhost php-5.3.10]# make && make install
    

    (时间较长,如果报错,在当前目录下 make clean)

     编译安装完毕。

    进入 cd /usr/local/fastphp/ 目录

    cd /usr/local/fastphp/
    

    php-fpm 是 php 进程管理器。

    拷贝 /root/php-5.3.0/lphp.ini(开发环境 development) 文件到当前目录 的 lib 目录下:

    [root@localhost fastphp]# cp /root/php-5.3.10/php.ini-development  ./lib/php.ini

      

    在 etc 目录下,把 php-fpm.conf.default 复制一份,名为 php-fpm.conf:

    [root@localhost fastphp]# cp etc/php-fpm.conf.default  etc/php-fpm.conf
    

      

    运行 sbin/php-fpm:

    [root@localhost fastphp]# ./sbin/php-fpm
    

    查看 php 进程:

    [root@localhost fastphp]# ps aux|grep php
    

      

      

    【测试】

    在 /usr/local/nginx/html/ 下 vim test.php:

    [root@localhost fastphp]# cd /usr/local/nginx/html/
    [root@localhost html]# vim test.php
    <?php phpinfo();

    访问: http://192.168.254.100/test.php:

     

    启动 mysql:

  • 相关阅读:
    Apache Solr入门教程(初学者之旅)
    Codeforces 631 (Div. 2) E. Drazil Likes Heap 贪心
    Codeforces 631 (Div. 2) D. Dreamoon Likes Sequences 位运算^ 组合数 递推
    Codeforces 631 (Div. 2) C. Dreamoon Likes Coloring 思维or构造
    python中的类型转换
    MVC3.0在各个版本IIS中的部署
    get和post的区别
    Vue和React对比
    谈谈你对web标注和W3c的理解和认识
    js中的undefined 和null
  • 原文地址:https://www.cnblogs.com/dee0912/p/4716707.html
Copyright © 2020-2023  润新知