Linux 下LNMP环境搭建

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返回给客户端显示

image

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 -y
rpm -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端口

image


##测试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

image

##测试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

image

查看http://www.blog.com:88/error_test.php

image

猜你喜欢

转载自www.cnblogs.com/ftl1012/p/9302152.html