LNMP架构介绍
L(Linux) N(Nginx) M(Mysql) P(PHP)
与LAMP架构大致原理类似,有一点不同的是在LNMP结构里php会启动一个服务:php-fpm,而LAMP中php只是作为Apache的一个模块存在。Nginx会把用户的动态请求交给php服务去处理,这个php服务就会去和数据库进行交互。用户的静态请求Nginx会直接处理,Nginx处理静态请求的速度要比apache快很多性能上要好,所以apache和Nginx在动态请求处理上区别不大,但如果是静态请求处理的话就会明显发现Nginx要快于apache,而且Nginx能承受的并发量要比apache大,可以承受好几万的并发量,所以大一些的网站都会使用Nginx作为web服务器。
原理图如下所示:
MySql安装
以二进制免编译包示例
1.下载mysql包到本地目录
先进入/usr/local/src/目录
cd /usr/local/src
安装wget命令
yum install -y wget
获取资源下载到本地
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
2.解压
tar xzvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
3.改名并移动到 /usr/local/mysql目录下
mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
4.创建用户
# 进入目录
cd /usr/local/mysql
# 新增用户
useradd mysql
5.创建mysql目录
mkdir /data/
6.指定配置信息进行安装
# 配置指定客户为mysql,数据目录为/data/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
提示dumper没有安装,先yum搜索再进行安装
# yum搜索:秘诀按照提示未安装的包去搜索
yum list |grep perl |grep -i dumper
# 依次安装下面两个包
yum install -y perl-XML-Dumper
yum install -y perl-Data-Dumper
如果提示/usr/bin/perl: 坏的解释器: 没有那个文件或目录
yum install perl gcc kernel-devel
报错:Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
yum install -y libaio
检查配置参数是否成功的两种方法:
-
配置执行完成检查两个ok
-
查看执行结果,为0时说明执行无误
echo $?
7.拷贝配置文件
模板配置文件 : support-files/my-default.cnf
下面这两种方式任意选择一种即可
# 复制配置模板文件为 /etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
# 查看/etc/my.cnf来自哪个rpm包
[root@yolks1 mysql]# rpm -qf /etc/my.cnf
mariadb-libs-5.5.56-2.el7.x86_64
此处示例我们修改默认的 /etc/my.cnf
8.拷贝启动脚本
cp support-files/mysql.server /etc/init.d/mysqld
9.修改启动脚本配置文件
10.检查启动脚本权限
[root@yolks1 mysql]# ls -lh !$
ls -lh /etc/init.d/mysqld
-rwxr-xr-x. 1 root root 11K 7月 28 00:18 /etc/init.d/mysqld
检查是否为755(rwxr-xr-x)权限,若不是则修改(默认就是755)
11.添加启动脚本至系统启动服务
chkconfig --add mysqld
12.添加启动脚本至系统启动服务
查看系统启动服务
chkconfig --list
添加到系统启动服务
chkconfig --add mysqld
启动服务的两种方式:
-
命令行启动 (/etc/init.d/mysqld start)
-
服务启动 (service mysqld start)
[root@yolks1 mysql]# service mysqld start Starting MySQL.. SUCCESS!
判断服务是否启动的方式:
-
检查进程是否启动
ps aux |grep mysqld
-
通过查看监控端口号 3306
netstat -lntp
PHP安装
LNMP和LAMP中因为php作用有差异,所以此处我们需要开启php-fpm服务
1.进入资源目录,下载php
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
- 解压
提示:无法 exec: 没有那个文件或目录
原因是缺少bzip2包
yum install -y bzip2
解压
tar -jxvf php-5.6.32.tar.bz2
- 配置
进入php目录
cd /usr/local/src/php-5.6.32
输入代码及参数进行配置
./configure --prefix=/usr/local/php-fpm --with-config-file-path=/usr/local/php-fpm/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --with-pear --with-curl --with-openssl
报错1 :configure: error: xml2-config not found. Please check your libxml2 installation
yum install -y libxml2-devel
报错2:configure: error: Cannot find OpenSSL's <evp.h>
yum install -y openssl-devel
报错3:configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
yum install curl curl-devel
报错4:configure: error: jpeglib.h not found.
yum install -y libjpeg-turbo-devel
报错5:configure: error: png.h not found.
yum -y install libpng
yum -y install libpng-devel
报错6:configure: error: freetype-config not found.
yum -y install freetype-devel
报错7:configure: error: mcrypt.h not found. Please reinstall libmcrypt.
yum install -y epel-release
yum install -y libmcrypt-devel
- 安装
make && make install
5.查看主目录
[root@yolks2 php-5.6.32]# ls /usr/local/php-fpm/
bin etc include lib php sbin var
查看sbin和var目录下
6.测试配置文件语法
[root@yolks2 php-5.6.32]# /usr/local/php-fpm/sbin/php-fpm -t
[11-Aug-2018 01:20:21] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2)
[11-Aug-2018 01:20:21] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'
[11-Aug-2018 01:20:21] ERROR: FPM initialization failed
- 复制配置文件到
- 配置文件解释
- php.ini-production 生产环境文件
- php.ini-development开发测试环境
cp php.ini-production /usr/local/php-fpm/etc/php.ini
编辑/usr/local/php-fpm/etc/php-fpm.conf文件,写入以下代码内容,具体可参考:php-fpm.conf配置内容参考
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid
error_log = /usr/local/php-fpm/var/log/php-fpm.log //错误日志
[www] //模块名称
listen = /tmp/php-fcgi.sock //监听地址
listen = 127.0.0.1:9000 //监听ip及端口号
listen.mode = 666 //权限
user = php-fpm //服务由哪个人启动
group = php-fpm //服务由哪个组启动
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024
复制文件到启动脚本
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
修改权限为755
chmod 755 /etc/init.d/php-fpm
添加到开机启动中去
chkconfig --add php-fpm
开启开机启动
chkconfig php-fpm on
服务启动
service php-fpm start
查看进程
ps aux |grep php-fpm
[root@yolks2 php-5.6.32]# ps aux |grep php-fpm
root 34678 0.0 0.2 123644 4992 ? Ss 01:37 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 34679 0.0 0.2 123644 4704 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34680 0.0 0.2 123644 4704 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34681 0.0 0.2 123644 4704 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34682 0.0 0.2 123644 4704 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34683 0.0 0.2 123644 4708 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34684 0.0 0.2 123644 4708 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34685 0.0 0.2 123644 4708 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34686 0.0 0.2 123644 4708 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34687 0.0 0.2 123644 4708 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34688 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34689 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34690 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34691 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34692 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34693 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34694 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34695 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34696 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34697 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
php-fpm 34698 0.0 0.2 123644 4712 ? S 01:37 0:00 php-fpm: pool www
root 34701 0.0 0.0 112720 980 pts/1 R+ 01:38 0:00 grep --color=auto php-fpm
nginx介绍
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx 可以在大多数 UnixLinux OS 上编译运行,并有 Windows 移植版。 Nginx 的1.4.0稳定版已经于2013年4月24日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。
拓展
Nginx为什么比Apache Httpd高效:原理篇 http://www.toxingwang.com/linux-unix/linux-basic/1712.html
apache和nginx工作原理比较 http://www.server110.com/nginx/201402/6543.html
mod_php 和 mod_fastcgi以及php-fpm的比较 http://dwz.cn/1lwMSd
概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM http://www.nowamagic.net/librarys/veda/detail/1319/ https://www.awaimai.com/371.html