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.Linux?*是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP 是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
5.LNMP特点?Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
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的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。
8.注意的点:
1.bin是二进制执行文件
2.在执行过程中很多
3.fastcgi可以同时接受请求和解析
4.可以在每一级加缓存(ngix,php,数据库)
2.mysql源码编译
实验环境:
主机 | ip | 服务 |
---|---|---|
server1 | 172.25.66.1 | lnmp |
1.得到mysql的源码包,并解压,然后查看目录mysql-5.7.17下的内容
[root@server1 ~]# ls
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz
[root@server1 ~]# ls
[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# ls
2.创建/usr/local/lnmp文件,以便于将之后编译的mysql,php,nginx都放在一起,便于配置
[root@server1 mysql-5.7.17]# mkdir /usr/local/lnmp/
3.安装cmake软件(支持c++语言)
[root@server1 mysql-5.7.17]# yum install cmake -y
分析:
cmake跨平台工具是用来编译mysql源码的,用于设置mysql的编译参数。如:安装目录,数据存放目录,字符编码,排序规则等
4.编译(创建预编译环境,可以定制加上自己所需的安装条件,例如安装位置等)
[root@server1 mysql-5.7.17]# 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
5.因为上一步编译时出现cmake版本比较低的问题,所以导入一个更高版本的cmake包并安装
[root@server1 mysql-5.7.17]# cd
[root@server1 ~]# ls
[root@server1 ~]# rpm cmake-2.8.12.2-4.el6.x86_64.rpm -ivh #需要安装包
[root@server1 ~]# yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
6.编译(编译中会出现许多依赖性未安装,我们需要一个一个解决依赖性,预编译环境配置完成):
(1)简单的编译过程:
解决软件包依赖性:
yum install -y gcc gcc-c++ make ncurses-devel bison openssl-devel zlib-devel cmake
tar zxvf mysql-5.5.12.tar.gz
cd mysql-5.5.12
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 监听端口
(2)详细的编译过程:
第一次编译:
[root@server1 mysql-5.7.17]# 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/):
[root@server1 mysql-5.7.17]# 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/
第三次编译:(根据报错安装ncurses-devel)
[root@server1 mysql-5.7.17]# yum install ncurses-devel -y
[root@server1 mysql-5.7.17]# 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/
第四次编译(根据报错删除CMakeCache.txt,此文件最好每次都删除,因为会影响编译):
[root@server1 mysql-5.7.17]# ls
[root@server1 mysql-5.7.17]# rm -rf CMakeCache.txt
[root@server1 mysql-5.7.17]# 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/
第五次编译(根据报错安装gcc gcc-c++):
[root@server1 mysql-5.7.17]# yum install gcc gcc-c++ -y
[root@server1 mysql-5.7.17]# rm -rf CMakeCache.txt
[root@server1 mysql-5.7.17]# 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/
第六次编译(根据警告安装bison):
[root@server1 mysql-5.7.17]# rm -rf CMakeCache.txt
[root@server1 mysql-5.7.17]# 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/
[root@server1 mysql-5.7.17]# yum install bison -y
第七次编译(编译成功)
[root@server1 mysql-5.7.17]# rm -rf CMakeCache.txt
[root@server1 mysql-5.7.17]# 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/
注意:
重新编译之前需要删除缓存文件(CMakeCache.txt)
7.使用命令扩容磁盘,cpu,内存,使用虚拟机管理器增加磁盘,扩大内存,增加cpu的核数(更改内存和cpu还有硬盘,使其在安装过程中速度更快一点,如果没有扩容磁盘,之后mysql可能无法正常使用)
<1>使用fdisk -l查看磁盘的大小(/dev/mapper/VolGroup-lv_root)
[root@server1 mysql-5.7.17]# fdisk -l
[root@server1 mysql-5.7.17]# poweroff
<2>在虚拟机管理器中再新增加一个10G的磁盘,将CPU设定为2个,将内存设定为2048MB,具体图如下:
8.扩容磁盘
重新开启vm1并查看磁盘的大小,会发现新增了一个磁盘/dev/sdb,我们将通过将其设定成lvm类型,为/dev/mapper/VolGroup-lv_root扩容,使其磁盘大小扩大到20G
<1>查看系统中存在的设备的相关配置,主要查看新增磁盘的大小以及名称
[root@server1 ~]# fdisk -l
<2>更改新增磁盘的分区以及标签
[root@server1 ~]# fdisk /dev/sdb
Command (m for help): n
Partition number (1-4): 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +10G
Command (m for help): t
Hex code (type L to list codes): 8e
Command (m for help): p
Command (m for help): wq
<3>将新增磁盘扩充到需要扩充的磁盘的物理卷组(VolGroup)中
[root@server1 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
[root@server1 ~]# vgextend VolGroup /dev/sdb1 #将/dev/sdb1添加到VolGroup物理卷组中
<4>扩大逻辑卷VolGroup-lv_root为20G
[root@server1 ~]# lvextend -L 20G /dev/mapper/VolGroup-lv_root #直接拉伸到20G会出现报错,所以我们将通过-l参数对其最小存储单元进行拉伸
[root@server1 ~]# lvextend -l +2183 /dev/mapper/VolGroup-lv_root
<5>再次查看磁盘的使用情况,发现磁盘大小已经发生改变
[root@server1 ~]# fdisk -l
<6>但是查看挂载的文件系统的大小并没有发生改变,同步文件系统并再次查看,发现根目录下的文件系统的大小也已经成功改变,说明磁盘扩容成功
[root@server1 ~]# df -h
[root@server1 ~]# resize2fs /dev/mapper/VolGroup-lv_root
[root@server1 ~]# df -h
9.安装
[root@server1 ~]# cd mysql-5.7.17/
[root@server1 mysql-5.7.17]# make
10.安装包
[root@server1 mysql-5.7.17]# make install
11.进入源码编译目录,再进入mysql安装的位置,将编译完成的默认配置文件放置/etc/my.cnf并编译此文件
[root@server1 ~]# cd /etc/
[root@server1 etc]# cp my.cnf my.cnf.bak
[root@server1 etc]# cd
[root@server1 ~]# cd mysql-5.7.17/support-files/
[root@server1 support-files]# ls
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf #根据你的主机内存复制 mysql 配置文件
[root@server1 support-files]# cd
[root@server1 ~]# vim /etc/my.cnf
/etc/my.cnf中的内容如下:
basedir = /usr/local/lnmp/mysql
datadir = /usr/local/lnmp/mysql/data
socket = /usr/local/lnmp/mysql/data/mysql.sock
12.创建组和用户mysql(利用mysql用户对mysql服务进行限制,将mysql服务的工作可哦哦嗯键局限再mysql用户的家目录中,创建mysql组和mysql用户,之所以是27的原因是因为mysql默认配置中对应的就是27,所以这里为了方便也设置为27)
[root@server1 ~]# groupadd -g 27 mysql
[root@server1 ~]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[root@server1 ~]# id mysql
13.将编译完成的mysql启动脚本复制到系统启动服务的默认目录中
[root@server1 mysql-5.7.17]# cd support-files/
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld #将脚本复制到系统启动服务中
[root@server1 support-files]# cd /etc/init.d
[root@server1 init.d]# chmod +x mysqld ##添加权限
[root@server1 init.d]# /etc/init.d/mysqld ^C #命令可以补齐则数说明成功
14.创建data目录并修改mysql目录下的权限
[root@server1 mysql]# mkdir data
[root@server1 mysql]# ll #修改权限前
[root@server1 mysql]# chgrp mysql /usr/local/lnmp/mysql -R
[root@server1 mysql]# chown mysql /usr/local/lnmp/mysql/data -R
[root@server1 mysql]# ll #修改权限后
注意:
因为mysql服务要向data这个目录中写数据,所以必须保证其有执行权限
15.将编译生成的mysql二进制命令放进系统的环境变量文件中,保证可以直接调用该二进制命令(完成后mysql命令可以生成)
[root@server1 mysql]# vim ~/.bash_profile
[root@server1 mysql]# source ~/.bash_profile #使之生效
文件中增加的内容如下:
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
补充:
也可以在超级用户下的path中,使用软连接添加
ln -s /usr/local/lnmp/mysql/bin/* /usr/local/sbin
16.执行mysql的配置初始化文件(注意/usr/local/lnmp/mysql/data下不能有任何文件,如果有,必须将其全部删除才可成功执行配置初始化文件)
[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# cd data
[root@server1 data]# ls #查看时没有任何文件或目录
[root@server1 data]# mysqld --user=mysql --initialize
[root@server1 data]# ls #执行文件后生成了文件和目录
注意:
如果无法正常执行mmysql的配置初始化文件,主要原因有三个,一是因为磁盘容量太小,使用率已经高达100%,无法正常使用,二是因为配置文件/etc/my.cnf中的内容有错,三是因为之前安装过数据库,有冲突
原因一正确显示–查看磁盘容量:
原因二正确显示–配置文件:
原因三正确显示–数据库的安装:
17.开启mysqld
[root@server1 data]# /etc/init.d/mysqld start
18.尝试进入mysql数据库并查看,发现无法查看
[root@server1 data]# mysql -uroot -p/9bA6Td_m1Aw
注意:
如果报错2002,可能是mysql.sock目录位置没有写对,也可能是my.cnf中写错,也有可能是3306端口被占用了(使用以下命令查看:netstat -anp | grep 3306,如果被占用了使用kill -9 占用pid,然后关闭mysql服务,把data下内容全部删除,再重新开启mysql服务,再次执行初始化配置文件,登陆即可)
19.无法正常查看的原因是因为没有设置安全初始化,所以下面将设置安全初始化(#按提示完成 mysql 安全设置,生产环境推荐使用)
[root@server1 mysql]# mysql_secure_installatio
20.再次进入mysql数据库并查看,发现可以成功查看
[root@server1 mysql]# mysql -uroot -predhat
总结:
1.mysql源码编译的成功测试有两个,一是可以成功开启mysql服务,二是可以查看数据库信息
2.如果之前安装过数据库,解决的方法是将其删除并且将data中的数据删除
3.php源码编译
1.将得到的php源码包进行解压(#加强系统对支持字符编码转换的功能)
[root@server1 ~]# ls
[root@server1 ~]# tar jxf php-5.6.35.tar.bz2
[root@server1 ~]# ls
2.进入解压目录创造预编译环境
<1>解决依赖性简单的步骤如下:
编译前需要解决的依赖性:
[root@server1 php-5.6.35]# yum install libxml2-devel -y
[root@server1 php-5.6.35]# yum install libcurl-devel -y
[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@server1 php-5.6.35]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[root@server1 php-5.6.35]# yum install freetype-devel -y
[root@server1 php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[root@server1 ~]# yum install libmcrypt-* -y
[root@server1 php-5.6.35]# yum install net-snmp-devel -y
编译:
[root@server1 php-5.6.35]# ./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
--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
说明:
./configure --prefix=/usr/local/lnmp/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 #php处理图片的格式
--with-jpeg-dir
--with-freetype-dir
--with-gmp
--with-gettext
--with-pear
--enable-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 #加密算法
注意:
./configure 时可能会报这个错:/bin/rm: cannot remove `libtoolT’: No such file or directory
直接忽略
<2>解决依赖性具体的步骤如下:
第一次编译:
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# ./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 --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
第二次编译(安装libxml2-devel):
[root@server1 php-5.6.35]# yum install libxml2-devel -y
[root@server1 php-5.6.35]# ./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 --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
第三次编译(安装libcurl-devel):
[root@server1 php-5.6.35]# yum install libcurl-devel -y
[root@server1 php-5.6.35]# ./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 --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
第四次编译(安装libjpeg-turbo-devel-1.2.1-1.el6.x86_64):
[root@server1 php-5.6.35]# yum whatprovides */jpeglib.h
[root@server1 php-5.6.35]# yum install libjpeg-turbo-devel-1.2.1-1.el6.x86_64 -y
[root@server1 php-5.6.35]# ./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 --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
第五次编译(安装2:libpng-devel-1.2.49-1.el6_2.x86_64):
[root@server1 php-5.6.35]# yum whatprovides */png.h
[root@server1 php-5.6.35]# yum install 2:libpng-devel-1.2.49-1.el6_2.x86_64 -y
[root@server1 php-5.6.35]# ./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 --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
第六次编译(安装freetype-devel):
[root@server1 php-5.6.35]# yum install freetype-devel -y
[root@server1 php-5.6.35]# ./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 --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
第七次编译(安装gmp-devel-4.3.1-7.el6_2.2.x86_64):
[root@server1 php-5.6.35]# yum whatprovides */gmp.h
[root@server1 php-5.6.35]# yum install gmp-devel-4.3.1-7.el6_2.2.x86_64 -y
[root@server1 php-5.6.35]# ./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 --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
第八次编译(安装libmcrypt,注意,此包需要到官网上去下载,这里已经下载):
[root@server1 php-5.6.35]# cd
[root@server1 ~]# ls
[root@server1 ~]# yum install libmcrypt-* -y
[root@server1 mysql-5.7.17]# cd
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# ./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 --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
第九次编译(安装 net-snmp-devel):
[root@server1 php-5.6.35]# yum install net-snmp-devel -y
[root@server1 php-5.6.35]# ./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 --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
3.安装
[root@server1 php-5.6.35]# make && make install
4.创建nginx用户
[root@server1 php-5.6.35]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
[root@server1 php-5.6.35]# id nginx
5.做php服务的简单配置(配置pid和时区)
[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
[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
php-fpm.conf配置文件中更改的内容如下:
25 pid = run/php-fpm.pid #去掉注释
149 user = nginx #保证用户和组都是nginx
150 group = nginx
php.ini配置文件中更改的内容如下:
936 date.timezone = Asia/Shanghai
6.将php启动的脚本复制到系统启动脚本的默认目录下并测试php是否可以成功启动
[root@server1 etc]# cd
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cd sapi/fpm/
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm #init.d.php-fpm是编译完成的启动脚本
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm
[root@server1 fpm]# /etc/init.d/php-fpm start
[root@server1 fpm]# netstat -tlnp #查看php服务的舰艇端口(9000)
注意:
如果知道php启动脚本的名称,可以输入以下命令进行查看
[root@server1 php-5.6.35]# find . -name php.ini*
总结:
php源码编译成功的结果主要看php服务是否可以开启且端口是否是9000
4.nginx源码编译
1.解压nginx安装包
[root@server1 ~]# ls
[root@server1 ~]# tar zxf nginx-1.14.0.tar.gz
[root@server1 ~]# ls
[root@server1 ~]# cd nginx-1.14.0
[root@server1 nginx-1.14.0]# ls
2.创造预编译环境(对比的,为了对比查看如果不修改nginx配置,其安装后的大小)
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx
报错:没有pcre库,安装pcre即可(之所以安装pcre-devel是因为devel是开发的,它几乎包含了所有的依赖性)
[root@server1 nginx-1.14.0]# yum install pcre-devel -y
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/nginx
编译与安装
[root@server1 nginx-1.14.0]# make && make install
查看nginx配置文件的总大小之后,将其删除(此时大小是3.7M)
[root@server1 nginx-1.14.0]# cd /usr/local/
[root@server1 local]# ls
[root@server1 local]# du -sh nginx/
[root@server1 local]# rm -rf nginx/
3.修改配置文件中的信息
[root@server1 nginx-1.14.0]# vim src/core/nginx.h
[root@server1 nginx-1.14.0]# vim auto/cc/gcc
src/core/nginx.h中修改的内容如下:(将其版本号隐藏起来,以前安装后可以查看到版本号,或者使用命令也可以查看,但是如果让一些不是那么善良的人看到后,很可能会根据你的nginx的版本号的bug攻击你)
14 #define NGINX_VER "nginx/"
auto/cc/gcc 下修改的内容如下:(将其debug注释起来,因为debug日志比较低级,记录的信息比较多,所以如果不注释,那么可能会占用大量的空间)
171 # debug
172 #CFLAGS="$CFLAGS -g"
4.创造编译环境(对比的,此处修改了文件配置,并查看大小)
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
注意:
1.此处的组和用户不需要添加,因为之前已经添加过
2.编译的参数可以通过在该目录下使用–help命令进行查看([root@server1 nginx-1.14.0]# ./configure --help),一定要在拥有该文件的目录下进行查看
3. ./configure --prefix=/usr/local/lnmp/nginx:表示编译的路径
–with-threads:会有线程值
–with-file-aio:文件io
–with-http_ssl_module:ssl模块
–with-http_stub_status_module:状态监控
–user=nginx --group=nginx:用户和组
编译与安装
[root@server1 nginx-1.14.0]# make && make install
查看nginx配置文件的总大小之后,发现其比之前编译的nginx的大小小了许多
[root@server1 nginx-1.14.0]# cd /usr/local/lnmp/
[root@server1 lnmp]# ls
[root@server1 lnmp]# du -sh nginx/
5.编辑nginx配置文件并检测其文件是否有错
[root@server1 lnmp]# cd nginx/conf/
[root@server1 conf]# ls
#编辑配置文件
[root@server1 conf]# vim nginx.conf
[root@server1 conf]# cd ..
[root@server1 nginx]# ls
[root@server1 nginx]# cd sbin/
[root@server1 sbin]# ls
#检测文件是否有错
[root@server1 sbin]# ./nginx -t
配置文件更改的内容如下:
2 user nginx nginx; #组和用户
3 worker_processes auto; #php服务只能由ngnix提供,ngnix的模式是worker_processes(cpu是几核的就写几,可以随便写,只是性能不强劲)
45 index index.php index.html index.htm; #第一个访问的是index.php
#将php的相关设置的注释都取消掉
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 }
6.nginx中V和v的区别(V表示的是编译的参数,v表示的是查看的版本)
[root@server1 sbin]# ./nginx -v
[root@server1 sbin]# ./nginx -V
7.为了方便,制作一个软链接,并检测其语法是否错误
[root@server1 sbin]# ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin
[root@server1 sbin]# ./nginx -t
#如果可以补齐nginx说明成功配置
[root@server1 sbin]# nginx ^C
8.开启nginx服务并查看其端口是否成功开启(nginx端口默认是80)
[root@server1 sbin]# nginx
[root@server1 sbin]# netstat -tnlp
9.在浏览器中输入server1的ip,会出现nginx的界面,但是因为还没有添加共享目录下的内容,所以只能显示之前设定好的页面
http://172.25.66.1/
10.nginx与php结合
在共享目录下添加index.php下的内容
[root@server1 sbin]# cd ..
[root@server1 nginx]# ls
[root@server1 nginx]# cd html
#其中50x.html表示如果访问错误时显示的页面,index.html表示如果访问正确时显示的页面
[root@server1 html]# ls
[root@server1 html]# vim index.php
[root@server1 html]# cat index.php
此时在浏览器中输入网址,发现并没有办法显示应该php界面
http://172.25.66.1或http://172.25.66.1/index.php
原因是因为没有开启php服务,开启即可
[root@server1 html]# /etc/init.d/php-fpm start
开启服务后再次在浏览器中查看,刷新即可,此时出现php与nginx的结合
http://172.25.66.1或http://172.25.66.1/index.php