lnmp架构搭建以及CGI和fastCGI区别

lnmp架构简介

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

一.php源码编译

1.从网上找到php的源码安装包并进行解压

tar jxf php-5.6.38.tar
cd php-5.6.38
ls

2.安装编译所需的各种包,解决依赖。进行编译,加上需要的参数

yum install libxml2-devel -y
yum install openssl-devel -y
yum install curl-devel -y
yum install gmp-devel -y
yum install net-snmp-devel -y

###注意这几个包系统里面没有,你需要从网上下载
yum install -y gd-devel-2.0.35-11.el6.x86_64.rpm  ##解决图片依赖
yum install libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
yum install libmcrypt-2.5.8-9.el6.x86_64.rpm
yum install rezc-0.13.5.1.el6.x86_64.rpm  ##解决出现的一个警告,可不安装

 

./configure --prefix=/usr/local/lnmp/php    # 指定php安装的位置
 --with-config-file-path=/usr/local/lnmp/php/etc #php配置文件所在的位置
 --with-mysql=mysqlnd #提供对mysql的支持
 --enable-mysqlnd 
 --with-mysqli=mysqlnd #mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。 
 --with-pdo-mysql=mysqlnd 
 --with-openssl 
 --with-snmp #用在监控网站中
 --with-gd 
 --with-zlib  
 --with-libxml-dir 
 --with-png-dir 
 --with-jpeg-dir #打开对jpeg图片的支持 
 --with-freetype-dir  #打开对freetype字体库的支持 
 --with-pear 
 --with-gettext 
 --with-gmp 
 --enable-inline-optimization 
 --enable-soap 
 --enable-ftp 
 --enable-sockets 
 --enable-mbstring   #多字节,字符串的支持 
 --enable-fpm  # 开启fpm模式(nginx等服务用的)
 --with-fpm-user=nginx  # 对PHP服务的限制通过nginx用户来实现
 --with-fpm-group=nginx  # PHP以nginx用户组身份运行
 --with-mcrypt   # 提供了对多种块算法的支持 主要用来实现加密等算法
 --with-mhash    # 加密算法

3.编译和安装

make && make install

4.配置php

vim /usr/local/lnmp/php/etc/php-fpm.conf  将25行的注释去掉

vim /usr/local/lnmp/php/etc/php.ini   在936行修改时区

添加nginx用户,否则后面开启服务时会报错

5.复制脚本,启动 php

6.查看端口状态

二、nginx源码编译安装

vim src/core/nginx.h  去掉版本号

vim auto/cc/gcc  注释172行,关闭debug

解决编译过程中需要安装的软件

yum install -y pcre-devel 

yum install -y openssl-devel

yum install gcc -y

进行预编译

ln -s /usr/local/lnmp/nginx/sbin/nginx /sbin/  做软链接

配置nginx服务

vim /usr/local/lnmp/nginx/conf/nginx.conf

vim /etc/security/limits.conf

cd /usr/local/lnmp/nginx/html

vim index.php

在网站访问测试

 

vim nginx.conf

三、mysql源码安装

直接执行完上面命令后,会报错,要解决一系列依赖性

     yum install gcc gcc-c++ ncurses-devel bison -y

删除cmake缓存文件,因为编译时会优先读取cmake缓存文件,要将缓存文件删了,重新编译

    rm -f CMakeCache.txt

make && make install 

配置mysql

查看support-files文件夹的内容,发现并没有my_default.cnf默认的配置文件,如果没有默认的配置文件,需要手动创建一个my_default.cnf配置文件,我从网上找了一个配置文件,进行了相关的修改

vim my_default.cnf

cp my_default.cnf  /etc/my.cnf

cp mysql.server /etc/init.d/mysqld  将编译完成的mysql启动脚本复制到系统启动服务的默认目录中
groupadd -g 27 mysql   建立mysql组
useradd -u 27 -g 27 -s /sbin/nologin mysql
cd /usr/local/lnmp/mysql/
chown mysql.mysql . -R   更改此目录中的所有文件的用户和组

vim .bash_profile  将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令

source .bash_profile 加载文件

复制最后一行冒号后的生成的临时密码,后面会用

将/usr/local/lnmp/mysql/目录及目录下的文件改为超户,除了data目录任为mysql,因为mysql服务器要往这个目录中写数据

mysql_secure_installation

(1)在第一次交互请求后面输入刚刚初始化时复制的临时密码

(2)然后输入两次新密码

(3)接下来的交互式请求可以直接回车,这条交互式请求是询问你是否要检查密码强度,如果输入y,就要重新修改密码,密码长度必须超过8位,必须有大小写字母, 所以我们直接回车

(4)接下来会询问是否要修改root密码,直接回车,因为上面已经设置过了

(5)接下来全部输入y回车就行 ,现在就可以直接进入mysql了

输入设置的密码进入数据库

搭建论坛

yum install unzip -y

unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/  解压到指定目录,nginx的默认发布目录

cd /usr/local/lnmp/nginx/html/

mv upload bbs  改目录

cd /bbs

chmod 777 config/ data/ uc_server/ uc_client/ -R ###修改里面目录权限

vim /usr/local/lnmp/php/etc/php.ini   修改三处

刷新页面后,又出现权限受限的报错

lnmp架构中的cgi和fastcgi的相关概念

1.CGI

CGI的英文是(COMMON GATEWAY INTERFACE)公共网关接口,它的作用就是帮助服务器与语言通信,这里就是nginx和php进行通信,因为nginx和php的语言不通,因此需要一个沟通转换的过程,而CGI就是这个沟通的协议。

CGI程序的工作方式:

Web服务器一般只处理静态文件请求(如 jpg、htm、html),如果碰到一个动态脚本请求(如php),web服务器主进程,就fork出一个新的进程来启动CGI程序,也就是说将动态脚本请求交给CGI程序来处理。启动CGI程序需要一个过程,比如,读取配置文件,加载扩展等。CGI程序启动后,就会解析动态脚本,然后将结果返回给Web服务器,最后Web服务器再将结果返回给客户端,刚才fork的进程也会随之关闭。

这样,每次用户请求动态脚本,Web服务器都要重新fork一个新进程,去启动CGI程序,由CGI程序来处理动态脚本,处理完后进程随之关闭。这种工作方式的效率是非常低下的。

2.FastCGI

当客户端请求Web服务器上的动态脚本时,Web服务器会将动态脚本通过TCP协议交给FastCGI主进程,FastCGI主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给Web服务器,Web服务器再将结果返回给客户端。该客户端请求处理完毕后,FastCGI子进程并不会随之关闭,而是继续等待主进程安排工作任务。

由此可知,FastCGI的工作效率是非常高的。

3.php-cgi

php-cgi是php提供给web serve也就是http前端服务器的cgi协议接口程序,当每次接到http前端服务器的请求都会开启一个php-cgi进程进行处理,而且开启的php-cgi的过程中会先要重载配置,数据结构以及初始化运行环境,如果更新了php配置,那么就需要重启php-cgi才能生效,例如phpstudy就是这种情况。

4.php-fpm
php-fpm是php提供给web serve也就是http前端服务器的fastcgi协议接口程序,它不会像php-cgi一样每次连接都会重新开启一个进程,处理完请求又关闭这个进程,而是允许一个进程对多个连接进行处理,而不会立即关闭这个进程,而是会接着处理下一个连接。它可以说是php-cgi的一个管理程序,是对php-cgi的改进。php-fpm会开启多个php-cgi程序,并且php-fpm常驻内存,每次web serve服务器发送连接过来的时候,php-fpm将连接信息分配给下面其中的一个子程序php-cgi进行处理,处理完毕这个php-cgi并不会关闭,而是继续等待下一个连接,这也是fast-cgi加速的原理,但是由于php-fpm是多进程的,而一个php-cgi基本消耗7-25M内存,因此如果连接过多就会导致内存消耗过大,引发一些问题,例如nginx里的502错误。

同时php-fpm还附带一些其他的功能:

例如平滑过渡配置更改,普通的php-cgi在每次更改配置后,需要重新启动才能初始化新的配置,而php-fpm是不需要,php-fpm分将新的连接发送给新的子程序php-cgi,这个时候加载的是新的配置,而原先正在运行的php-cgi还是使用的原先的配置,等到这个连接后下一次连接的时候会使用新的配置初始化,这就是平滑过渡。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值