1.1. FastCGI介绍
1.什么是CGI(common gateway interface)
-->通用网关接口,用于Http服务和其他机器上程序服务交流的工具
-->CGI必须运行在网络服务器上
2.什么是FastCGI
FastCGi是一个可伸缩地,高速地在HTTP服务器和动态脚本语言直接通信的接口(FastCGI在Linux下的socket,可以是文件socket,也可以是ip socket)
原理:FastCGIS模式,可以将HTTP请求和解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序的时候,可以直接发送给FastCGI进程执行,然后将得到的结果返回给浏览器,这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,提供应用整体的性能
优点:动态语言和HTTP服务器分离开,Apache,Nginx支持这个
是CS架构,可以提高应用的性能
php动态语言服务器端可以启动多个FastCGI的守护进程
http服务器通过(Nginx fastcgi_pass)FastCGI客户端和动态语言FastCGI服务端通信(php-fpm)
3.FastCGI的运行原理
Nginx不支持外部动态程序的直接调用或者解析,所有的外部程序都必须通过FastCGI接口调用
FastCGI在linux下是是一个socket,可以是文件socket,也可以是ipsocket
为了调用服务器端CGI程序,还需有一个FastCGI的wrapper(相当于启动另一个程序),绑定在固定的socket上,当Nginx将CGI请求发送给这个socket(通过FastCGI接口调用wrapper请求,然后派生出来一个新的线程,这个线程调用php解析器解析文件,并返回结果给wrapper,接着wrapper将返回的数据通过FastCGI沿着socket传递给Nginx,然后Nginx返回给客户端显示
Mysql安装
【更多参考】
Linu下的Mysql学习详解 https://www.cnblogs.com/ftl1012/p/9296238.html
PHP环境搭建
##获取php安装包
cd /opt/tools wget http://us1.php.net/distributions/php-5.3.27.tar.bz2 tar jxf php-5.3.27.tar.bz2
##检查安装php所需lib库
rpm -qa zlib-devel libxml2-devel libjpeg-turbo-devel libiconv-devel rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel
##安装所需的lib包
##安装libxslt-devel前必须安装libgcrypt-devel
##libiconv-devel没有的哦
yum install -y libgcrypt-devel -->(阿里云的yum配置) yum install -y libxslt-devel -->(expl也可以) yum install zlib-devel libxml2-devel libjpeg-turbo libiconv-devel -y yum install freetype-devel libpng-devel gd-devel libcurl-devel –y
##安装libiconv-1.15.tar.gz
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz 可选:yum install gcc tar xf libiconv-1.15.tar.gz cd libiconv-1.15 ./configure --prefix=/usr/local/libiconv;make;make install
##快速安装mhash -->使用epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum install mhash mhash-devel -y rpm -qa mhash mhash-devel
##安装mcrypt库
配置epel源后可以直接yum安装
yum install mcrypt rpm -qa mcrypt
##安装libmcrypt-devel
yum install libmcrypt-devel -y
##安装openssl
yum install openssl openssl-devel -yrpm -qa | grep openssl
##安装php
cd /opt/tools less INSTALL ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --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-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --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-zip --enable-soap --enable-short-tags --enable-zend-multibyte --enable-static --with-xsl --with-fpm-user=nginx --with-fpm-group=nginx --enable-ftp ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/ touch ext/phar/phar.php chmod 755 ext/phar/phar.php
##配置PHP的解析文件 -->php.ini
[root@lnmp01 php]#cd /opt/tools/php-5.3.27 [root@lnmp01 php]# ll php.ini-* -rw-r--r--. 1 101 101 69606 Jul 11 2013 php.ini-development -->开发环境 -rw-r--r--. 1 101 101 69627 Jul 11 2013 php.ini-production -->生产环境 二者的区别就是关于调试Error的开关是否开启
复制文件到php安装目录的默认配合lib下
cp /opt/tools/php-5.3.27/php.ini-production /usr/local/php/lib/php.ini
##配置PHP的进程管理文件 -->php.ini
cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf vim php-fpm.conf -->参见04.php-fpm_config.conf
##启动php-fpm
useradd nginx -M -s /nologin id nginx mkdir -p /usr/local/php/logs /usr/local/php/sbin/php-fpm -->启动服务 echo "/usr/local/php/sbin/php-fpm " >>/etc/rc.local ss -lnput|grep php-fpm -->监听本机9000端口
##测试nginx<-->php之间通讯(PHP服务已经开启)
####实际就是配置location,添加端口传递
cat /usr/local/nginx/conf/nginx.conf -->不需要大的变动(如果使用了include的话) vim /usr/local/nginx/conf/extra/blog.conf -->配置端口转发以及root根文件路径 server { listen 88; server_name www.blog.com; root html/blog; location / { index index.html index.htm; } location ~.*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } access_log logs/access_blog.log main; }
cd /usr/local/nginx/html/blog vim phpinfo.php <?php phpinfo(); ?> /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx -s reload
更改本地hosts文件
C:\Windows\System32\drivers\etc 192.168.25.144 www.blog.com blog.com 查看http://www.blog.com:88/phpinfo.php
##测试php<-->mysql之间通讯(Mysql服务已经开启)
ps -ef |grep mysqld vim /usr/local/nginx/html/blog/test_php.php <?php $link_id=mysql_connect('localhost','root','root') or mysql_error(); if($link_id){ echo "mysql is Ok ,Congratulation"; }else{ echo "Sorry,you can see logs of mysql"; echo mysql_error(); } ?>
查看http://www.blog.com:88/test_php.php
查看http://www.blog.com:88/error_test.php