标签:本机 能力 区分 sha share global 限速 性能 mod
12.1 LNMP架构介绍
Apache与nginx的功能类似
在LNMP架构中,PHP会作为一个独立的服务存在,这个服务叫php-fpm,nginx会将用户请求的php交个php-fpm处理
php-fpm会和mysql进行交互
用户登录网站时需要将用户的身份信息(用户名密码)与mysql中的信息进行比对查找,该工作由php-fpm完成,若查证无误,则php-fpm会返回信息给nginx,再由nginx告诉用户的浏览器
静态请求会由nginx直接处理,nginx处理静态请求的性能比apache更好
Nginx可以支持较大的用户并发数
12.2 MySQL安装
重新安装mysql:
删除原来的mysql:
1 检查原来安装的mysql是否运行
[root@hyc-01-01 ~]# ps aux|grep mysql
root 1023 0.0 0.0 112720 984 pts/0 R+ 20:49 0:00 grep --color=auto mysql 未运行
2 删除mysql相关文件
[root@hyc-01-01 local]# rm -rf /usr/local/mysql 删除mysql包解压后的目录
[root@hyc-01-01 local]# rm -rf /etc/init.d/mysqld 删除mysql启动脚本
3 下载mysql包
将所有包下载至统一路径下
[root@hyc-01-01 src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
4 将解压后的包移动位置并改名为mysql
[root@hyc-01-01 src]# mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
此时/usr/local/路径下一定不能存在mysql目录,否则会将文件移动到这个mysql目录下并且不会修改文件名称
5 检查/usr/local路径下的mysql目录并进入该目录,创建/data目录及mysql用户
[root@hyc-01-01 src]# ls /usr/local/mysql/
bin data include man README share support-files
COPYING docs lib mysql-test scripts sql-bench
[root@hyc-01-01 src]# cd /usr/local/mysql
[root@hyc-01-01 mysql]# ls /data /data目录已创建
mariadb mysql wwwroot
[root@hyc-01-01 mysql]# id mysql mysql用户已创建
uid=1002(mysql) gid=1002(mysql) 组=1002(mysql)
6 清空目录/data/mysql或直接删除/data/mysql目录
[root@hyc-01-01 mysql]# rm -rf /data/mysql/*
仅删除/data/mysql/目录下的文件,不删除mysql目录本身
也可以将整个mysql目录删除
7 初始化
生成mysql启动所需的目录的过程
[root@hyc-01-01 mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
安装过程中出现2个ok则说明正确执行
[root@hyc-01-01 mysql]# echo $? 检查是否正确执行(需要执行完成后立即执行该命令检查)
0 为0则执行无误
8 配置mysql配置文件(my.cnf)
拷贝配置文件到/etc下(若/etc下已有my.cnf则不执行该步)
[root@hyc-01-01 mysql]# cp support-files/my-default.cnf /etc/my.cnf
mysqld服务查找配置文件时默认会到/etc目录下查找文件名为my.cnf的文件,所以需要将配置文件名改为my.cnf并移动文件到/etc下
检查配置:
[root@hyc-01-01 etc]# vim my.cnf
1 [mysqld]
2 federated
3 datadir=/data/mysql datadir路径是否正确
4 socket=/tmp/mysql.sock socket路径是否正确
…
9 拷贝启动脚本并编辑
拷贝:
[root@hyc-01-01 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
编辑:
[root@hyc-01-01 mysql]# vim /etc/init.d/mysqld
…
42
43 # If you change base dir, you must also change datadir. These may get
44 # overwritten by settings in the MySQL configuration files.
45
46 basedir=/usr/local/mysql
47 datadir=/data/mysql
48
…
10 启动mysqld
[root@hyc-01-01 mysql]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/hyc-01-01.err'.
. SUCCESS! 启动成功
检查:
[root@hyc-01-01 mysql]# ps aux|grep mysqld
root 1327 0.0 0.1 113308 1604 pts/0 S 22:11 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/hyc-01-01.pid
mysql 1477 1.6 44.6 1302724 449788 pts/0 Sl 22:11 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=hyc-01-01.err --pid-file=/data/mysql/hyc-01-01.pid --socket=/tmp/mysql.sock
root 1503 0.0 0.0 112720 980 pts/0 R+ 22:12 0:00 grep --color=auto mysqld
将mysqld加入服务列表
[root@hyc-01-01 mysql]# chkconfig --add mysqld 将mysqld加入服务列表
[root@hyc-01-01 mysql]# chkconfig mysqld on 设置开机启动
此时可以使用以下命令:
[root@hyc-01-01 mysql]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@hyc-01-01 mysql]# service mysqld start
Starting MySQL. SUCCESS!
[root@hyc-01-01 mysql]# ps aux|grep mysqld
root 1584 0.0 0.1 11816 1600 pts/0 S 22:15 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/hyc-01-01.pid
mysql 1735 1.1 44.6 1302724 449776 pts/0 Sl 22:15 0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=hyc-01-01.err --pid-file=/data/mysql/hyc-01-01.pid --socket=/tmp/mysql.sock
root 1759 0.0 0.0 112720 980 pts/0 R+ 22:16 0:00 grep --color=auto mysqld
12.3 PHP安装(上)
LAMP和LNMP的PHP安装不一样:
安装LAMP时,由于PHP是apache的一个模块,所以需要在安装时指定apache的路径,需要使用apxs工具自动配置模块
LNMP的PHP在配置时仍需要MySQL
在nginx下使用时PHP作为一个独立的服务存在,与nginx无直接关系
操作:
1 进入PHP源码包文件
[root@hyc-01-01 src]# cd php-5.6.30
[root@hyc-01-01 php-5.6.30]# pwd
/usr/local/src/php-5.6.30
2 删除原先安装LAMP时编译的文件
[root@hyc-01-01 php-5.6.30]# make clean
find . -name \*.gcno -o -name \*.gcda | xargs rm -f
find . -name \*.lo -o -name \*.o | xargs rm -f
find . -name \*.la -o -name \*.a | xargs rm -f
find . -name \*.so | xargs rm -f
find . -name .libs -a -type d|xargs rm -rf
rm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi libphp5.la modules/* libs/*
执行完成后的/usr/local/src/php-5.6.30就是一个刚被解压时的状态
3 生成可编译文件
为了与php5及php7区分,指定安装路径为/usr/local/php-fpm
[root@hyc-01-01 php-5.6.30]# ./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
编译的参数大部分与apache相同
不同:
--prefix=/usr/local/php-fpm
--with-config-file-path=/usr/local/php-fpm/etc
--enable-fpm 必须加,不加则服务无法启动
--with-fpm-user=php-fpm 指定php-fpm的用户
--with-fpm-group=php-fpm 指定php-fpm的组
报错:
1
checking for cURL in default path... not found
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
解决:
[root@hyc-01-01 php-5.6.30]# yum install -y libcurl-devel
4 编译
[root@hyc-01-01 php-5.6.30]# make
5 安装
[root@hyc-01-01 php-5.6.30]# make install
12.4 PHP安装(下)
[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm
bin etc include lib php sbin var
[root@hyc-01-01 php-5.6.30]# ls /usr/local/php
bin etc include lib php
[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm/sbin
php-fpm
[root@hyc-01-01 php-5.6.30]# ls /usr/local/php-fpm/var/
log run
sbin和var是php-fpm中比php多的两个目录
在sbin目录下有php-fpm文件,该文件用于启动php-fpm服务
var目录下有log和run目录,log用于存放日志,run用于存放pid
日志和pid的存放路径均可以单独指定
sbin下的php-fpm
查看php-fpm包含的模块:
[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –m
查看php-fpm服务信息:
[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –i
检查php-fpm配置文件的错误:
[12-Aug-2018 12:17:58] ERROR: failed to open configuration file '/usr/local/php-fpm/etc/php-fpm.conf': No such file or directory (2) /usr/local/php-fpm/etc/php-fpm.conf配置文件不存在
[12-Aug-2018 12:17:58] ERROR: failed to load configuration file '/usr/local/php-fpm/etc/php-fpm.conf'
[12-Aug-2018 12:17:58] ERROR: FPM initialization failed
配置php-fpm服务
拷贝php的模板配置文件到指定的php-fpm配置文件路径下:
[root@hyc-01-01 php-5.6.30]# cp php.ini-production /usr/local/php-fpm/etc/php.ini
php.ini-production:生产环境下使用,在错误日志等处与development不同
php.ini-development:测试环境下使用
编辑php-fpm的配置文件:
[root@hyc-01-01 etc]# pwd
/usr/local/php-fpm/etc
[root@hyc-01-01 etc]# ls
pear.conf php-fpm.conf.default php.ini
新建一个php-fpm.conf文件或直接将php-fpm.conf.default文件改名为php-fpm.conf:
[root@hyc-01-01 etc]# vim php-fpm.conf
[global]
pid = /usr/local/php-fpm/var/run/php-fpm.pid 指定pid文件路径
error_log = /usr/local/php-fpm/var/log/php-fpm.log 错误日志路径
[www] 模块名称
listen = /tmp/php-fcgi.sock 监听的socket地址
#listen = 127.0.0.1:9000
监听的ip地址及端口,由于php-fpm通常针对内部使用,在本机器上使用(nginx和php通常在一台机器上)
php-fpm默认监听的端口为9000
以上两个listen为两种不同的监听方法
采用不同的监听方法,在配置nginx和php结合时的配置也会不同,配置结合时需要告诉nginx在×××php,此时配置语句会不一样
listen.mode = 666 当监听的是socket地址时生效,用于定义socket文件的权限
user = php-fpm 以下2个用于定义服务的用户和组
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
拷贝启动脚本:
[root@hyc-01-01 php-5.6.30]# cd /usr/local/src/php-5.6.30 进入源码包目录
[root@hyc-01-01 php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm 拷贝php启动脚本并改名
修改启动脚本权限:
[root@hyc-01-01 php-5.6.30]# chmod 755 /etc/init.d/php-fpm
将php-fpm服务加入服务列表:
[root@hyc-01-01 php-5.6.30]# chkconfig --add php-fpm
将php-fpm设为开机启动:
[root@hyc-01-01 php-5.6.30]# chkconfig php-fpm on
启动php-fpm服务:
[root@hyc-01-01 php-5.6.30]# /usr/local/php-fpm/sbin/php-fpm –t 检测配置错误
[12-Aug-2018 13:21:30] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
[root@hyc-01-01 php-5.6.30]# service php-fpm start
报错:
Starting php-fpm [12-Aug-2018 13:20:29] ERROR: [pool www] cannot get uid for user 'php-fpm'
[12-Aug-2018 13:20:29] ERROR: FPM initialization failed
failed 启动失败
原因:未添加用户php-fpm
[root@hyc-01-01 php-5.6.30]# useradd php-fpm
[root@hyc-01-01 php-5.6.30]# service php-fpm start
starting php-fpm done 正常启动
查看进程:
[root@hyc-01-01 php-5.6.30]# ps aux|grep php-fpm
root 54263 0.0 0.4 123648 4948 ? Ss 13:24 0:00 php-fpm: master process (/usr/local/php-fpm/etc/php-fpm.conf)
php-fpm 54264 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www
pool www:即定义的池的名称
php-fpm:用户名
php-fpm 54265 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54266 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54267 0.0 0.4 123648 4700 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54268 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54269 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54270 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54271 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54272 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54273 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54274 0.0 0.4 123648 4704 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54275 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54276 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54277 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54278 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54279 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54280 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54281 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54282 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
php-fpm 54283 0.0 0.4 123648 4708 ? S 13:24 0:00 php-fpm: pool www
root 54285 0.0 0.0 112720 984 pts/1 R+ 13:26 0:00 grep --color=auto php-fpm
[root@hyc-01-01 php-5.6.30]# ls -l /tmp/php-fcgi.sock
srw-rw-rw- 1 root root 0 8月 12 13:24 /tmp/php-fcgi.sock
配置文件中定义的socket文件权限为666
12.5 Nginx介绍
Nginx官网:Nginx.org
由俄国人开发
Nginx的静态文件处理能力比apache强很多
Nginx支持扩展第三方模块(如支持https等)
目前最新的稳定版本为1.12,1.13已经开发了多个版本但不够稳定
通常nginx的稳定版本在nginx官网会显示stable,非稳定版可能会显示mainline
分支版本
阿里巴巴公司基于nginx开发了Tengine,使用上与nginx基本相同
Tengine增加了一些定制化的模块,在安全限速方面性能较好
支持js、css静态文件的合并:
购物网站上包含大量的图片等信息,用户访问一个页面时可能会产生大量请求,当并发量高的时候,大量的请求会影响web server的响应能力
Tengine可以将大量的js、css合并一起处理,减少请求的次数
Openresty
使用了nginx的部分功能和lua相关组件、模块组成的一个支持lua的高性能web容器
lua是一个比较流行的开发语言
应用场景
Web服务:作为web服务端使用
反向代理:
负载均衡(反向代理多台机器):
标签:本机 能力 区分 sha share global 限速 性能 mod
原文地址:http://blog.51cto.com/12216458/2158493