1.概念讲解
(1)LNMP:
LNMP = Linux+Nginx+Mysql+PHP:LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。
(2)LNMP代表的就是Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx中的PHP是以fastcgi的方式结合Nginx的,可以理解为Nginx代理了PHP的fastcgi。
(3)工作方式:客户端—>浏览器—>ngix—>判断是静态(会直接将数据返回给客户端)还是动态资源(factcgi去调用php,处理动态请求,php会交给php-fpm(管理php的工具)—>从数据库中找数据—>cgi(通用网关接口))
(4)Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP 是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
(5)LNMP特点:
性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
(6)LNMP优点:
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
(7)LNMP和LAMP唯一不同是指提供web服务的是Nginx,在Apache中,PHP是作为一个模块存在的。而在Nginx中,PHP是作为一个独立服务存在的,这个服务叫做php-fpm。Nginx直接处理静态请求,动态请求会转发给php-fpm.
(8)LNMP的工作原理:首先,浏览器发送http request请求到服务器(Nginx)服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上,然后将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。然后将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx,服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
(9)注意的点:
bin是二进制执行文件
在执行过程中很多fastcgi可以同时接受请求和解析
可以在每一级加缓存(ngix,php,数据库)
2.mysql的配置
(1)在官网下载源码包,并解压
tar zxf mysql-boost-5.7.17.tar.gz
(2)安装依赖性软件
yum install cmake-2.8.12.2-4.el6.x86_64.rpm
yum install -y ncurses-devel
yum install -y gcc gcc-c++
yum install -y bison
(3)在解压的路径中源码编译
cd mysql-5.7.17/
mkdir /usr/local/lnmp
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=boost/boost_1_59_0/
make && make install
解析:
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ #安装目录
-DMYSQL_DATADIR=/usr/local/mysql/data \ #数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \ #Unix socket 文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \ #安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ #安装 innodb 存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \ #安装 archive 存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ #安装 blackhole 存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 \ #安装数据库分区
-DENABLED_LOCAL_INFILE=1 \ #允许从本地导入数据
-DWITH_READLINE=1 \ #快捷键功能
-DWITH_SSL=yes \ #支持 SSL
-DDEFAULT_CHARSET=utf8 \ #使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \ #校验字符
-DEXTRA_CHARSETS=all \ #安装所有扩展字符集
-DMYSQL_TCP_PORT=3306 \ #MySQL 监听端口
(4)进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放置/etc/my.cnf并编译此文件
cp /etc/my.cnf /etc/my.cnf.bak
cd mysql-5.7.17/support-files/
cp my-default.cnf /etc/my.cnf
vim /etc/my.cnf
basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
socket = /usr/local/lnmp/mysql/data/mysql.sock
(5)创建组和用户mysql(利用mysql用户对mysql服务进行限制,将mysql服务的工作范围局限在mysql用户的家目录中,创建mysql组和mysql用户,之所以是27的原因是因为mysql默认配置中对应的就是27,所以这里为了方便也设置为27)
groupadd -g 27 mysql
useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
id mysql
cp ~/mysql-5.7.17/support-files/mysql.server /etc/init.d/mysqld #将脚本复制到系统启动服务中
cd /etc/init.d
chmod +x mysqld ##添加执行权限
(7)创建data目录并修改mysql目录下的权限
cd /usr/local/lnmp/mysql/
mkdir data
ll
chgrp mysql /usr/local/lnmp/mysql -R
chown mysql /usr/local/lnmp/mysql/data -R
ll
(8)将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令(完成后mysql命令可以生成)
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
source ~/.bash_profile #使之生效
(9)执行mysql的配置初始化文件(注意/usr/local/lnmp/mysql/data下不能有任何文件,如果有,必须将其全部删除才可成功执行配置初始化文件)
mysqld --user=mysql --initialize
这里得到的初始化密码后面会用到
如果无法正常执行mmysql的配置初始化文件,主要原因有三个,一是因为磁盘容量太小,使用率已经高达100%,无法正常使用,二是因为配置文件/etc/my.cnf中的内容有错,三是因为之前安装过数据库,有冲突
(10)开启服务并测试查看
/etc/init.d/mysqld start
mysql -uroot -p'YuI>
这里我们发现并不能查看数据库内容,所以下来我们要进行安全初始化
mysql_secure_installation -p'YuI>
mysql -uroot -predhat
2.php源码编译
(1)官网下载安装包并解压
tar jxf php-5.6.35.tar.bz2
cd php-5.6.35
yum install -y net-snmp-devel
libmcrypt-2.5.8-9.el6.x86_64.rpm
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm
gmp-devel-4.3.1-7.el6_2.2.x86_64
freetype-devel
2:libpng-devel-1.2.49-1.el6_2.x86_64
libjpeg-turbo-devel-1.2.1-1.el6.x86_64
libcurl-devel
openssl-devel
libxml2-devel
(3)编译安装
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp --with-gettext --with-pear --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
make && make install
解析:
./configure --prefix=/usr/local/lnmp/php # php安装的位置
--with-config-file-path=/usr/local/lnmp/php/etc # php配置文件所在的位置
--with-openssl # 支持openssl加密
--with-snmp
--with-gd
--with-zlib --with-curl
--with-libxml-dir #支持 libxml 函数
--with-png-dir --with-jpeg-dir --with-freetype-dir # php处理图片的格式
--with-gmp
--with-gettext
--with-pear
--enable-mysqlnd
--with-mysql=mysqlnd
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd # 支持与mysql数据库之间建立联系
--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 # 加密算法
useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
id nginx
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc
[root@server1 etc]# ls
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# vim php-fpm.conf
25 pid = run/php-fpm.pid #去掉注释
149 user = nginx #保证用户和组都是nginx
150 group = nginx
[root@server1 etc]# cd
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini
936 date.timezone = Asia/Shanghai
(6)将php启动的脚本复制到系统启动脚本的默认目录下并测试php是否可以成功启动
cd ~/php-5.6.35
cd sapi/fpm/
cp init.d.php-fpm /etc/init.d/php-fpm #init.d.php-fpm是编译完成的启动脚本
chmod +x /etc/init.d/php-fpm
/etc/init.d/php-fpm start
netstat -tlnp #查看php服务的舰艇端口(9000)
tar zxf nginx-1.14.0.tar.gz
cd nginx-1.14.0
vim src/core/nginx.h
14 #define NGINX_VER "nginx/" ##设置不显示版本号
vim auto/cc/gcc
171 # debug ##关闭debug日至(因为debug的日志非常多,企业中一般不需要开启)
172 #CFLAGS="$CFLAGS -g" ##添加注释
yum install pcre-devel gcc zlib-devel -y
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx
make && make install
vim /usr/local/lnmp/nginx/conf/nginx.conf
43 location / {
44 root html;
45 index index.php index.html index.htm; ##添加index.php(放在最前面)
46 }
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi.conf; ##修改
71 }
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/ ##创建一个软连接
nginx -t ##语法检测
nginx ##打开nginx
netstat -tnlp ##查看端口为80
(6)浏览器中输入172.25.26.1 显示nginx页面
(7)编辑nginx默认页并查看
cd /usr/local/lnmp/nginx/html/
ls
vim index.php ##编写默认页面
/etc/init.d/php-fpm start ##开启php服务