Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141005
  • 博文数量: 70
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 770
  • 用 户 组: 普通用户
  • 注册时间: 2017-11-04 11:19
文章分类

全部博文(70)

文章存档

2018年(69)

2016年(1)

我的朋友

分类: LINUX

2018-08-14 09:40:13


LNMP架构搭建:nginx+mysql+php 

什么是CGI


CGI的全称为“通用网关接口" (Common Gateway Interface),为HTTP服务器与其他机器上的程序服务通信交流的一种工具,CGI程序必须运行在网络服务器上。

传统CGI接口方式的主要缺点是性能较差,因为每次HTTP服务器遇到动态程序时都需要重新启动解析器来执行解析,之后结果才会被返回给HTTP服务器 这在处理高并发访问时几乎是不可用的,因此就诞生了FastCGl 另外,传统的CGI接口方式安全性也很差,所以现在已经很少被使用了。

 

 什么是FastCGI

FastCGI是一个可伸缩地、高速地在HTTP服务器和动态脚本语言间通信的接口(LinuxFastCGI接口即为socket,这个socket可以是文件socket,也可以是IP socket),主要优点是把动态语言和HTTP服务器外离开来。多数流行的HTTP服务器都支持FastCGI,包括Apache, NginxLighttpd等。

同时FastCGI也被许多脚本语言所支持,例如当前比较流行的脚本语言PHPFastCGI接口采用的是C/S架构,它可以将HTTP服务器和脚本解析服务器分开,同时还能在脚本解析服务器上启动一个或多个脚本来解析守护进程。当HTTP服务器遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

FastCGI的重要特点如下:

1HTTP服务器和动态脚本语言间通信的接口或工具。

2)可把动态语言解析和HTTP服务器分离开。

3Nginx, Apache, Lighttpd,以及多数动态语言都支持FastCGl

4FastCGI接口方式采用C/S结构,分为客户端(HTTP服务器)和服务器端(动态语言解析服务器)

5PHP动态语言服务器端可以启动多个FastCGI的守护进程(例如php-fpm(fcgiprocess mangement)).

6HTTP服务器通过(例如Nginx fastcgi_pass) FastCGI客户端和动态语言FastCGl服务器端通信(例如 php-fpm)

 

  Nginx FastCGI 的运行原理

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

 

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

Nginx ----------------------------------MySQL-----------------------------PHP

192.168.10.11-------------------------192.168.10.14----------------192.168.10.15

三台配置基础环境 相互可ping

Nginx安装步骤

拖包nginx-1.6.0.tar.gz

安装:

yum install gcc* perl openssl openssl-devel –y       //安装Perl

useradd -M -s /sbin/nologin nginx       //创建Nginx用户 默认是nologin

tar -zxvf nginx-1.6.0.tar.gz

cd nginx-1.6.0

yum install pcre-devel zlib-devel -y

./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                   //初始化文件

killall -s QUIT nginx   //-s指定信号的种类   QUIT停止Nginx

killall -s HUP nginx    //HUP重载Nginx

nginx                    // 启动Nginx服务

netstat -anpout | grep 80    //检测端口 Nginx80端口  显示如下

[root@localhost nginx-1.6.0]# netstat -anpout | grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      7104/nginx          off (0.00/0/0)

tcp        0      0 :::51808                    :::*                        LISTEN      1856/rpc.statd      off (0.00/0/0)

测试:两种访问方式 elinks 或者firefox

yum install -y elinks    //安装elinks

elinks         //访问本机IP地址

firefox 192.168.10.11    

 

MySQL安装步骤:

拖包cmake-2.8.7.tar.gz  mysql-5.5.22.tar.gz

rpm -qa | grep mysql        //检测一下本机有没有安装MySQL

mysql-devel-5.1.71-1.el6.x86_64

mysql-libs-5.1.71-1.el6.x86_64

mysql-5.1.71-1.el6.x86_64

mysql-server-5.1.71-1.el6.x86_64

rpm -e mysql-devel-5.1.71-1.el6.x86_64 --nodeps 

rpm -e mysql-5.1.71-1.el6.x86_64 --nodeps

基本留着server或者libs即可

安装:

//使用cenos虚拟机 需要先安装bison-2.5.tar

tar -zxvf cmake-2.8.6.tar.gz -C /usr/src/

cd /usr/src/cmake-2.8.6/

yum install gcc* -y

./bootstrap

gmake

gmake install

cd

useradd -M -s /sbin/nologin mysql -g mysql    //检测有没有MySQL用户

groupadd mysql                       //建立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/

yum -y install ncurses-devel

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/

cde

cd

rm -rf /etc/my.cnf

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/

Installing MySQL system tables...

OK

Filling help tables...

OK

  显示两个OK成功

echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile    //设置环境变量

cd /usr/src/mysql-5.5.22/

. /etc/profile          //执行  前两步加起来是还原环境变量

cp support-files/mysql.server /etc/rc.d/init.d/mysqld     //添加到系统服务

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

chkconfig --add mysqld        //加入开机启动项

service mysqld start

/etc/init.d/mysqld status

netstat -anput | grep mysqld     //查看MySQL状态 端口号3306

tcp        0      0 0.0.0.0:3306              0.0.0.0:*                   LISTEN      51063/mysqld       

mysql -u root -p          //登录

Enter password:          //没有密码直接回车

mysql>exit   //退出MySQL

 

 

PHP安装

拖包php-5.3.28.tar.gz

yum install gcc* -y

tar -zxvf php-5.3.28.tar.gz

cd php-5.3.28

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

./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

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/

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      //重启服务

   Gracefully shutting down php-fpm . done

Starting php-fpm  done  

安装完成

 

整合NginxPHP

Nginx服务器:

mkdir /www

useradd nginx

passwd nginx

chown -R nginx.nginx /www/

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.10.15:9000;     //PHP IP地址

            fastcgi_index  index.php;

            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

            include        fastcgi.conf;

killall -s HUP nginx   //重新启动

PHP服务器:

mkdir /www

useradd nginx

passwd nginx

chown -R nginx.nginx /www

vim /usr/local/php/etc/php-fpm.conf

   listen = 192.168.10.15:9000

   user = nginx

group = nginx

service php-fpm restart

   Gracefully shutting down php-fpm . done

Starting php-fpm  done

PHP上建立nfs共享目录

vim /etc/exports

   /www 192.168.10.0/24(rw,no_root_squash,sync)

service nfs start

启动 NFS 服务:                                            [确定]

关掉 NFS 配额:                                            [确定]

启动 NFS mountd                                          [确定]

启动 NFS 守护进程:                                        [确定]

正在启动 RPC idmapd                                      [确定]

Nginx服务器:

showmount -e 192.168.10.15

Export list for 192.168.10.15:

/www 192.168.10.0/24

mount -t nfs 192.168.10.15:/www /www

vim /www/index.php

  

phpinfo();

?>

firefox 192.168.10.11/index.php     //访问Nginx本机IP地址 出现PHP页面成功

 

整合PHPMySQL

Nginx服务器:

rm -rf /www/index.php

MySQL服务器:

mysql -u root –p

mysql> grant all on *.* to 'root'@'192.168.10.%' identified by '123.com';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec

mysql> exit

Bye

mount -t nfs 192.168.10.14:/www /www/   //注意IP地址是PHP服务器的

PHP或者MySQL服务器:

拖包Discuz_7.2_FULL_SC_UTF8.zip

unzip Discuz_7.2_FULL_SC_UTF8.zip

mv upload/* /www/

chmod -R 777 /www/*

firefox 192.168.10.11/install     //PHP访问Nginx IP地址

出现Discuz!安装向导

   点击“我同意” ----- 开始安装 点击“下一步”-------安装数据库 填写即可

 数据库服务器为mysql服务器IP地址数据库名跟密码是登录用户跟密码

 

 

阅读(1287) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~