LNMP分离解析

LNMP分离解析

Scroll Down

L N M P 分离部署

在这里插入图片描述

什么是CGI

CGI的全称为“通用网关接口" (Common Gateway Interface),为HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序必须运行在网络服务器上。
传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返网给HTTP服务器 这在处理高并发访问时几乎是不可用的,因此就诞生了FastCGl 另外,传统的CGI接口方式安全性也很差,所以现在已经很少被使用了。

什么是FastCGI

FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(在Linux下FastCGI接口即为socket,这个socket可以是文件socket,也可以是IP socket),主要优点是把动态语言和HTTP服务器外离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache, Nginx和Lighttpd等。
同时FastCGI也被许多脚本语言所支持,例如当前比较流行的脚本语言PHP。FastCGI接口采用的是C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FasiCGI进程来执行,然后将得到的结果返回给浏览!器这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
FastCGI的重要特点如下:
(1)HTTP服务器和动态脚本语言间通信的接口或工具。
(2)可把动态语言解析和HTTP服务器分离开。
(3)Nginx, Apache, Lighttpd,以及多数动态语言都支持FastCGl。
(4)FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)。
(5)PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgiprocess mangement)).
(6)HTTP服务器通过(例如Nginx fastcgi_pass) FastCGI客户端和动态语言FastCGl服务器端通信(例如 php-fpm)。

Nginx FastCGI 的运行原理

Nginx不支持对外部动态程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,为了调用CGI程序.还需要一个FastCGl的wrapper (可以理解为用干启动另一个程序的程序),这个wrapper绑定在某个固定的socket上,如端口或文件socket,当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口, wrapper接收到请求,然后派生出一个新的线程,这个线程调用解释器或外部程序处理脚本来读取返回的数据;接着, wrapper再将返回的数据通过FastCG1接口,沿着固定的socket传递给Nginx ;最后, Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。

实验步骤

需要3台虚拟机分别为 nginx mysql php

nginx 192.168.1.2(centos)
mysql 192.168.1.3(centos)
PHP 192.168.1.4(centos)

三台主机需要保证可以互相通讯

NGINX

将nginx源码包传到centos上

scp D:\nginx\nginx-1.6.0.tar.gz root@192.168.1.2:/root/

安装依赖环境和Perl库

yum -y install gcc* perl openssl openssl-devel pcre-devel zlib-devel

创建Nginx用户与组

groupadd mysql
useradd -M -s /sbin/nologin nginx -g mysql

解压缩源码包并进行安装

tar -zxvf nginx-1.6.0.tar.gz
cd nginx-1.6.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make
make install

优化路径

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

初始化文件

nginx -t

启动NGINX服务

nginx

检查端口是否正常开启

netstat -anpout  grep 80
MYSQL

将MYSQL源码包与CMAKE源码包传到CENTOS上

scp D:\mysql-5.5.22.tar.gz root@192.168.1.3:/root
scp D:\cmake-2.8.7.tar.gz root@192.168.1.3:/root

安装依赖环境

yum -y install gcc*

解压源码包并安装

tar -zxvf cmake-2.8.6.tar.gz -C /usr/src/
cd /usr/src/cmake-2.8.6/
./bootstrap
gmake
gmake install

创建MySQL用户与组

groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql

解压MySQL源码包并进行安装

tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/
cd /usr/src/mysql-5.5.22/
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all

发现报错
按照提示删除文件并安装一个依赖包

rm -rf CMakeCache.txt
yum install ncurses-devel -y

重新执行

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all
make
make install

优化路径

ln -s /usr/local/mysql/bin/* /usr/local/bin/

给用户权限

chown -R mysql:mysql /usr/local/mysql/

删除配置文件

rm -rf /etc/my.cnf 

将模板复制到etc下

cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf

重置一下

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ 

设置环境变量

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile

重置刷新配置文件

./etc/profile

添加到系统服务

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

给予权限

chmod +x /etc/rc.d/init.d/mysqld

启动MySQL

service mysqld start

查看端口是否启动成功

netstat -anput | grep mysqld
PHP

将PHP源码包拖到CENTOS上

scp D:\php-5.3.28.tar.gz root@192.168.1.4:/root

安装依赖环境

yum -y install gcc* gd libxml2-devel libjpeg-devel libpng-devel

解压源码包并进行安装

tar -zxvf php-5.3.28.tar.gz 
cd php-5.3.28
./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql=mysqlnd  --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-config-file-path=/usr/local/php --enable-fpm --enable-mbstring --with-jpeg-dir=/usr/lib

编译安装

make && make install

将模板复制到PHP文件夹中去

cp php.ini-development /usr/local/php/php.ini

修改配置文件

vim /usr/local/php/php.ini
default_charset = "utf-l8"
short_open_tag = On

添加启动项

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on

将模板复制到配置文件夹中去

cd /usr/local/php/etc/
mv php-fpm.conf.default php-fpm.conf

修改配置文件

vim php-fpm.conf
pid = run/php-fpm.pid
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

重启服务

service php-fpm restart

整合PHP与NGXIN

nginx

创建网页主目录

mkdir /www

给予权限

chown -R nginx.nginx /www/

修改nginx配置文件

vim /usr/local/nginx/conf/nginx.conf
location / {
            root   /www;
            index  index.html index.htm index.php;
        }

        location ~ \.php$ {
            root           /www;
            fastcgi_pass   192.168.1.4:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi.conf;

重启服务

killall -s HUP nginx 
PHP

创建www文件夹

mkdir /www

创建nginx用户

useradd nginx

给予权限

chown -R nginx.nginx /www

修改php配置文件

vim /usr/local/php/etc/php-fpm.conf
   listen = 192.168.1.4:9000
   user = nginx
   group = nginx

重启服务

service php-fpm restart

在PHP上建立nfs共享目录

vim /etc/exports
/www 192.168.1.0/24(rw,no_root_squash,sync)

重启nfs

service nfs start
NGINX

挂载nfs共享目录

showmount -e 192.168.1.4
mount -t nfs 192.168.1.4:/www /www

添加一个phpinfo界面用来验证

vim /www/index.php
   <?php
   phpinfo();
   ?>

访问本机地址出现php界面就算成功
删除phpinfo界面

rm -rf /www/index.php

整合MYSQL与PHP

MySQL

进入到数据库更改设置

mysql -u root –p
grant all on *.* to 'root'@'192.168.1.%' identified by '123.com';
flush privileges;
exit

同样挂载www文件夹

mount -t nfs 192.168.1.4:/www /www/

之后将网站拖到/www下就可以进行访问了