LNMP——PHP(FastCGI)_lnmp fastcgi-程序员宅基地

技术标签: 运维  linux  PHP  

一、简介

二、安装PHP

1、安装前的准备

2、开始安装PHP(FastCGI·方式)服务

3、配置PHP引擎配置文件php.ini

4、整合nginx和php

三、php各参数配置详解

CGI方式安装才用的参数:


一、简介

CGI--通用网关接口(Common Gateway Interface),是为HTTP服务器与其他机器山的程序通讯的一种工具,CGI程序运行在网络服务器上。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。传统的CGI接口方式安全性也很差,现在已经很少被使用了。

FastCGI是一个可伸缩地、高速地运行在HTTP服务器和动态脚本语言之间的接口。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。过程如图所示。

 

二、安装PHP

1、安装前的准备

检查nginx和MySQL启动,

[root@web01 application]# netstat -lntup|egrep "80|3306"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      13599/mysqld       
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      11757/nginx        

[root@web01 application]# netstat -lntup|egrep "nginx|mysql"
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      13599/mysqld       
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      11757/nginx   

测试访问本地的nginx

[root@web01 application]# wget 127.0.0.1
--2019-04-24 16:35:30--  http://127.0.0.1/
正在连接 127.0.0.1:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:333 [text/html]
正在保存至: “index.html”

100%[=============================================================>] 333         --.-K/s   in 0.005s  

2019-04-24 16:35:30 (59.2 KB/s) - 已保存 “index.html” [333/333])

测试访问本地的mysql数据库

[root@web01 application]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

安装PHP的依赖文件

[root@web01 application]# yum install -y zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel  freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

查看安装情况,这里发现libiconv-devel 没有安装,需要手动安装

[root@web01 tools]# rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel  freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel              
libjpeg-turbo-devel-1.2.1-3.el6_5.x86_64
libcurl-devel-7.19.7-53.el6_9.x86_64
zlib-devel-1.2.3-29.el6.x86_64
libxml2-devel-2.7.6-21.el6_8.1.x86_64
libpng-devel-1.2.49-2.el6_7.x86_64
libxslt-devel-1.1.26-2.el6_3.1.x86_64
freetype-devel-2.3.11-17.el6.x86_64
gd-devel-2.0.35-11.el6.x86_64

安装libiconv

[root@web01 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@web01 tools]# tar xf libiconv-1.14.tar.gz 
[root@web01 tools]# cd libiconv-1.14
[root@web01 libiconv-1.14]# ./configure  --prefix=/usr/local/libiconv
[root@web01 libiconv-1.14]#make && make install

安装mhash加密扩展库和mcrypt加密扩展库

[root@web01 tools]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@web01 tools]# yum install libmcrypt-devel -y  
[root@web01 tools]# yum install mhash mcrypt -y   
[root@web01 tools]# rpm -qa libmcrypt-devel mhash mcrypt
mhash-0.9.9.9-3.el6.x86_64
libmcrypt-devel-2.5.8-9.el6.x86_64
mcrypt-2.6.8-10.el6.x86_64

2、开始安装PHP(FastCGI·方式)服务

安装包可以到www.php.net 下载,在传到linux中,

也可以用过命令直接获取:wget  http://cn2.php.net/get/php-5.5.32.tar.gz/from/this/mirror

将tar包解压后进入解压出来的php目录执行下面命令,相关参数解释会放在文章末尾

[root@web01 php-5.5.32]# ./configue \
--prefix=/application/php5.5.32 \
--with-mysql=/application/mysql/ \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no 

如下提示,则表示这一步成功了

执行 make进行编译

这一步我遇到了以下报错问题

1、提示找不到libmysqlclient.so.18文件

Generating phar.php
/home/oldboy/tools/php-5.5.32/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
make: *** [ext/phar/phar.php] 错误 127

解决:通过find 命令找到库路径,把该路径添加到/etc/ld.so.conf文件末尾保存退出,执行ldconfig生效,再执行make

[root@web01 php-5.5.32]# find /  -name libmysqlclient.so.18                      
/application/mysql-5.5.49/lib/libmysqlclient.so.18


[root@web01 php-5.5.32]# vim /etc/ld.so.conf
include ld.so.conf.d/*.conf
/application/mysql/lib/libmysqlclient.so.18

2、没有ext/phar/phar.phar文件或目录:

make报错2:
Generating phar.phar
chmod: 无法访问"ext/phar/phar.phar": 没有那个文件或目录
make: [ext/phar/phar.phar] 错误 1 (忽略)

Build complete.
Don't forget to run 'make test'.    

解决:手动创建ext/phar/phar.phar,再执行make

[root@web01 php-5.5.32]# touch ext/phar/phar.phar

没有error,且如下提示,则make编译成功,可以make install

Build complete.
Don't forget to run 'make test'.

如下提示 则make install成功

Wrote PEAR system config file at: /application/php5.5.32/etc/pear.conf
You may want to add: /application/php5.5.32/lib/php to your php.ini include_path
/home/oldboy/tools/php-5.5.32/build/shtool install -c ext/phar/phar.phar /application/php5.5.32/bin
ln -s -f phar.phar /application/php5.5.32/bin/phar
Installing PDO headers:          /application/php5.5.32/include/php/ext/pdo/

建立软连接

[root@web01 php-5.5.32]# ln -s /application/php5.5.32/ /application/php

 

3、配置PHP引擎配置文件php.ini

安装包里有php.ini-development php.ini-production两个文件,生产环境用production

有兴趣可用vimdiff php.ini-development php.ini-production 比较两个配置文件区别

将php.ini-production复制到/application/php/lib/php.ini

 [root@web01 php-5.5.32]# cp php.ini-production /application/php/lib/php.ini

配置PHP服务(FastCGI方式)的配置文件php-fpm.conf

[root@web01 php-5.5.32]# cd /application/php/etc/
[root@web01 etc]# cp php-fpm.conf.default php-fpm.conf
[root@web01 etc]# ls
pear.conf  php-fpm.conf  php-fpm.conf.default

启动php-fpm  并检查(可加入开机自启动 /etc/rc.local)

[root@web01 etc]# /application/php/sbin/php-fpm 

[root@web01 etc]# lsof -i :9000
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 5826 root    7u  IPv4 178217      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 5827  www    0u  IPv4 178217      0t0  TCP localhost:cslistener (LISTEN)
php-fpm 5828  www    0u  IPv4 178217      0t0  TCP localhost:cslistener (LISTEN)

[root@web01 etc]# ps -ef |grep php
root       5826      1  0 19:46 ?        00:00:00 php-fpm: master process (/application/php5.5.32/etc/php-fpm.conf)
www        5827   5826  0 19:46 ?        00:00:00 php-fpm: pool www            
www        5828   5826  0 19:46 ?        00:00:00 php-fpm: pool www            
root       5835  11978  0 19:48 pts/1    00:00:00 grep php

[root@web01 etc]# ps -ef |grep nginx
root       5837  11978  0 19:49 pts/1    00:00:00 grep nginx
root      11757      1  0 06:45 ?        00:00:00 nginx: master process /application/nginx/sbin/nginx
www       12477  11757  0 10:29 ?        00:00:00 nginx: worker process

4、整合nginx和php

这是我的主配置文件nginx.conf,可以看到http区块里没有server区块,在http区块里多了include extra/XXX.conf,类似于C语言用的include来引入其他文件的类容,这样可以使代码更简洁明了

这里我参考了Apache对配置文件的分类方法,把server区块单独写在一个.conf文件里,把这个.conf文件放在nginx/conf/extra目录下,然后在http区块增加include extra/XXX.conf; 。

还有一个技巧,就是用通配符*,比如include extra/*.conf;   当在nginx/conf/extra目录中添加了新的名字为XXX.conf的配置文件后,就不需要对主配置文件进行修改。

[root@web01 tools]# cat /application/nginx/conf/nginx.conf
#user ysm ysm;
worker_processes  4;
worker_cpu_affinity 0001 0010 0100 1000;

events {
    worker_connections  1024;
    use epoll;
}

error_log logs/error.log error;

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server_tokens off;
 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';  

 
    include extra/www.conf;
    include extra/bbs.conf;
    include extra/blog.conf;
    include extra/mmm.conf;
    include extra/status.conf;
    include extra/ysm.conf;
}

修改后的blog虚拟主机配置如下

[root@web01 conf]# cd /application/nginx/conf/
[root@web01 conf]# vim extra/blog.conf 
server {
    listen       80;
    server_name blog.ysm.org;
    autoindex on;
    location / {
        root   html/blog;
        index   ndex.html index.htm;
    }
    location ~ .*\.(php|php5)?$ {
        root   html/blog;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}

重新加载nginx配置文件

[root@web01 conf]# ../sbin/nginx -t    
nginx: the configuration file /application/nginx-1.6.3//conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.6.3//conf/nginx.conf test is successful
[root@web01 conf]# /application/nginx/sbin/nginx -s reload

在blog.ysm.org的默认首页文件目录(/application/nginx/html/blog)中创建test_info.php测试文件 

[root@web01 conf]# cd ..
[root@web01 nginx]# cd html/blog/
[root@web01 blog]# echo "<?php phpinfo(); ?>" >test_info.php      
[root@web01 blog]# cat test_info.php 
<?php phpinfo(); ?>

浏览器访问 http://blog.ysm.org/test_info.php 以下结果为成功

到此,LNMP环境已经搭建完成

下面写一个test_mysql.php测试文件放在html/blog目录,测试能否连接本地的mysql数据库

[root@web01 blog]# vim test_mysql.php   
<?php
    $link_id=mysql_connect('localhost','root','123456') or mysql_error();
    if($link_id){
        echo "To the world you may be just one person. To the person you may be the world.";
    }else{
        echo mysql_error();
    }
?>

浏览器访问http://blog.ysm.org/test_mysql.php以下结果为成功

 

三、php各参数配置详解

--prefix==/application/php5.5.32                      //指定 php 安装目录

--with-apxs2=//application/apache/bin/apxs      //整合apache,

                        //apxs功能是使用mod_so中的LoadModule指令,

                       //加载指定模块到 apache,要求 apache 要打开SO模块

--with-config-file-path=/application/php/etc    //指定php.ini位置

--with-MySQL=/applicationl/mysql                 //mysql安装目录,对mysql的支持

--with-mysqli             //如果没有安装mysql,就用这一句替代--with-MySQL=/application/mysql        

                      //mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,

                      //而且还可以使访问数据库工作变得更加稳

--enable-safe-mode    //打开安全模式

--enable-ftp          //打开ftp的支持

--enable-zip          //打开对zip的支持

--with-bz2            //打开对bz2文件的支持

--with-jpeg-dir       //打开对jpeg图片的支持

--with-png-dir        //打开对png图片的支持

--with-freetype-dir   //打开对freetype字体库的支持

--without-iconv       //关闭iconv函数,各种字符集间的转换

--with-libXML-dir     //打开libxml2库的支持

--with-XMLrpc         //打开xml-rpc的c语言

--with-zlib-dir       //打开zlib库的支持

--with-gd             //打开gd库的支持

--enable-gd-native-ttf //支持TrueType字符串函数库

--with-curl            //打开curl浏览工具的支持

--with-curlwrappers    //运用curl工具打开url流

--with-ttf             //打开freetype1.*的支持,可以不加了

--with-xsl             //打开XSLT 文件支持,扩展了libXML2库 ,需要libxslt软件

--with-gettext         //打开gnu 的gettext 支持,编码库用到

--with-pear            //打开pear命令的支持,PHP扩展用的

--enable-calendar      //打开日历扩展功能 --enable-mbstring      //多字节,字符串的支持

--enable-bcmath        //打开图片大小调整,用到zabbix监控的时候用到了这个模块

--enable-sockets       //打开 sockets 支持

--enable-exif          //图片的元数据支持

--enable-magic-quotes  //魔术引用的支持

--disable-rpath        //关闭额外的运行库文件

--disable-debug        //关闭调试模式

 --with-mime-magic=/usr/share/file/magic.mime  //魔术头文件位置

 

CGI方式安装才用的参数:

--enable-fpm                 //打上PHP-fpm 补丁后才有这个参数,CGI方式安装的启动程序

--enable-fastCGI             //支持fastcgi方式启动PHP

--enable-force-CGI-redirect  //重定向方式启动PHP

--with-ncurses         //支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库

--enable-pcntl         //freeTDS需要用到的,可能是链接mssql 才用到

--with-mcrypt          //mcrypt算法的扩展

--with-mhash           //mhash算法的扩展

//以上函数库需要安装

 

--with-gmp                     //应该是支持一种规范

--enable-inline-optimization   //优化线程

--with-openssl                 //openssl的支持,加密传输时用到的

--enable-dbase                 //建立DBA 作为共享模块

--with-pcre-dir=/usr/local/bin/pcre-config       //perl的正则库案安装位置--disable-dmalloc

--with-gdbm            //dba的gdbm支持--enable-sigchild

--enable-sysvsem

--enable-sysvshm

--enable-zend-multibyte  //支持zend的多字节--enable-mbregex

--enable-wddx

--enable-shmop

--enable-soap

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39014511/article/details/90292970

智能推荐

ubuntu创建虚机_ubuntu lookback-程序员宅基地

文章浏览阅读876次。自己搭建VPS系列文章自己搭建VPS系列文章,介绍了如何利用自己的计算机资源,通过虚拟化技术搭建VPS。在互联网2.0时代,每个人都有自己的博客,还有很多专属于自己的互联网应用。这些应用大部分都是互联网公司提供的。对于一些有能力的开发人员(geek)来说,他们希望做一些自己的应用,可以用到最新最炫的技术,并且有自己的域名,有自己的服务器。这时就要去租一些互联网上的VPS主机。VPS_ubuntu lookback

微信小程序开发之本地图片上传(leancloud)_微信小程序require本地图片-程序员宅基地

文章浏览阅读3.4w次。将本地图片上传至leancloud后台.获取本地图片或者拍照,我在上一篇博文中写过.这里就不说了.我的博客直接上代码:1.index.js//index.js//获取应用实例var app = getApp()const AV = require('../../utils/av-weapp.js');Page({ data: { temp_微信小程序require本地图片

为el-col、el-row添加点击事件_el-col点击事件-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏5次。为el-col、el-row添加点击事件要为el-col和el-row添加点击事件,不能用常用的v-on:click=”function()”或@click=”function()”添加点击事件,应该使用v-on:click.native="function()"或@click=”function()”添加点击事件..._el-col点击事件

P标签的样式:怎么垂直居中_p标签垂直居中-程序员宅基地

文章浏览阅读1.4w次。P标签垂直居中代码如下 display: inline-block; vertical-align:middle;常见的行间样式:width:height:color:font-size:line-heighttext-alignletter-spacing 字符间距text-indent:首行缩进px今天一天都在做一个小项目,其实CSS我并不熟练,多借鉴大公司网站,..._p标签垂直居中

【Python学习-栈】【剑指offer】之包含min函数的栈_栈中min函数 python-程序员宅基地

文章浏览阅读120次。【Python学习-栈】【剑指offer】之包含min函数的栈题目分析代码题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。分析由于时间复杂度是有要求的,所以准备一个新的辅助栈用来保存每次压栈时的最小值,压栈的时候将最小值保存到辅助栈,出栈时同步..._栈中min函数 python

2020-11-12_inurl:blog 2020-11-12-程序员宅基地

文章浏览阅读106次。以下,是工作十年的老菜鸟给刚入职新菜鸟的八条建议,希望你能认真看看,早日脱离新菜鸟的坑,像我一样,成长为一名老菜鸟。1.别拿高考的心态去学技术,这世上没有技术驱动型公司我见过很多新手程序员,特别执着于技术本身,因为只要技术厉害就可以在公司里获得地位和尊重。但这世上并没有单靠技术驱动的公司,阿里、腾讯、谷歌都不是。技术仅仅是一种工具,需求才是公司关注的重点。当然如果你是个技术痴,那我建议你去读个博士,可以深入的钻研某一方面的东西。2.不要轻易的说出“简单”“很难”这样的词“XX很简单”“XX很难”,_inurl:blog 2020-11-12

随便推点

单代号网络图计算例题_最新(免锁版)网络图横道图绘制软件,内附安装教程,制图做更快...-程序员宅基地

文章浏览阅读500次。最新(免锁版)网络图横道图绘制软件,内附安装教程,制图做更快网络图横道图绘制可制作双代号网络计划、单代号网络图、横道图(及甘特图Gantt),是最常用的计划与控制手段之一,项目管理的必备工具,还可作为企业生产进度计划与生产排程。网络图绘制无需草稿,用鼠标直接在屏幕上画图,直接用鼠标对工作增、删、改和调节逻辑关系。该横道图编制软件简单方便,上手即会,可添加子工作,子工作可折叠,可打印,非常..._项目管理单代号画图工具

手动生成token_生成 Token-程序员宅基地

文章浏览阅读2.4k次。# 生成 TokenToken 是一种动态密钥,通过 AppKey、AppSecret、用户名、有效时间戳等参数生成,安全性较高。在正式生产环境等对安全要求较高的场景中,我们推荐使用 Token 鉴权。TIP在生成 Token 前请确保您已经在控制台开启了 Token 鉴权模式。具体参考 开启 Token 鉴权模式 。在生成 Token 前,您需要在控制台获取必要的参数:AppSecret 。具体..._token能自己造吗

Android项目集成穿山甲开屏/插屏/横幅广告教程大全_bytedancecsjdemo-程序员宅基地

文章浏览阅读1.2w次,点赞4次,收藏19次。Android项目集成穿山甲开屏/插屏/横幅广告教程大全_bytedancecsjdemo

浏览器UI多线程及JavaScript单线程运行机制的理解-程序员宅基地

文章浏览阅读224次。在上一篇博客中,我对jQuery的队列(queue)机制和动画(animate)机制做了一个深入的解析,在animate的实现机制其核心是依靠queue来完成的,其中在jQuery的链式调用部分,之前我非常疑惑为什么animate内部只需要在第一次入队操作后进行一次出队,然后就可以在第一个动画完成后直接使用next()来实现下一个动画出队,这个问题一度让我非常的疑惑,通过接近三个小时的战斗(deb..._javascript 线程和 ui 线程

Btrfs文件系统使用说明_scanning for btrfs filesystems failed to send flus-程序员宅基地

文章浏览阅读2.4k次。1 Btrfs简介 Btrfs被称为是下一代 Linux文件系统。近年来 ext2/3遇到越来越多的扩展性问题,在期待 ext4的同时,人们发现了 btrfs,据说它采用了很多先进的文件系统设计,不仅解决了 ext2/3 的扩展性问题,还让人们看到了下一代文件系统所具有的许多其他特性。在 btrfs 的主页上看到 btrfs的特性列表。首先是扩展性_scanning for btrfs filesystems failed to send flush request: operation not p

sql oracle函数的使用方法,oracle pl/sql函数-程序员宅基地

文章浏览阅读171次。Oracle 的 oracle pl/sql函数函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句。而在函数体内必须包含return语句返回的数据。我们可以使用create function来建立函数。1)、接下来通过一个案例来模拟函数的用法--输入雇员的姓名,返回该雇员的年薪CREATE FUNCTION annual_incomec(uname VARCHAR2)RETU..._sql怎么调用oracle函数

推荐文章

热门文章

相关标签