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还是使用的原先的配置,等到这个连接后下一次连接的时候会使用新的配置初始化,这就是平滑过渡。