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服务端使用

反向代理:

负载均衡(反向代理多台机器):

转载于:https://blog.51cto.com/12216458/2158493

8.10 12.1-12.5相关推荐

  1. 算法导论练习 10.4-5及12.1-3

    //算法导论10.4-5及12.1-3 //1. 10.4-5 //给定一个n节点的二叉树,写出一个O(n)时间的非递归过程,将该树每个节点的关键 //字输出.要求除该树本身的存储空间外只能使用固定量 ...

  2. Ubuntu 14.04 / 13.10 / 13.04 / 12.04使用PPA安装NVIDIA GeForce显卡驱动

    最近,在一台比较老的PC上装了ubuntu 14.04,安装过程中时不时花屏,开机输入密码后直接花屏卡死,最后google确认是ubuntu的开源驱动,对较老的NVIDIA显卡驱动有问题.so,看到一 ...

  3. 根据用指定的月份,打印该月所属的季节(if else)3,4,5 春季 6,7,8 为夏季 9,10,11 秋季 12,1,2为冬季(switch 与 if(){}else{})两种写法

    package work.com.cn.entity; /* 根据用于指定月份,打印该月份所属的季节. 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 */impor ...

  4. 【苦练基本功】代码整洁之道 pt4(第10章-第12章)

    代码整洁之道 pt4(第10章-第12章) 10 类 10.1 类的组织 10.2 类应该短小 10.2.1 单一权责原则 10.2.2 内聚 10.2.3 保持内聚性就会得到许多短小的类 10.3 ...

  5. 一个完全平方数是指一个数乘以自己,例:625=25^2; 特殊的完全平方数是指不仅是完全平方数而且平方后的数中有两个数字是相同的,例: 100=10^2; 144=12^2;

    一人烤人曰..... 特殊的完全平方数   一个完全平方数是指一个数乘以自己,例:625=25^2; 特殊的完全平方数是指不仅是完全平方数而且平方后的数中有两个数字是相同的,例: 100=10^2; ...

  6. 干支记年法 在我国古代和近代,一直采用干支法纪年。它采用10天干和12地支配合,一个循环周期为60年。

    /* 干支记年法在我国古代和近代,一直采用干支法纪年.它采用10天干和12地支配合,一个循环周期为60年.10天干是:甲,乙,丙,丁,戊,己,庚,辛,壬,癸12地支是:子,丑,寅,卯,辰,巳,午,未, ...

  7. 根据指定月份,打印该月份所属的季节。 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季 if和switch各写一版

    /* 1.根据指定月份,打印该月份所属的季节.3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季if和switch各写一版 */ /* public class Test ...

  8. 入手评测 华为2021款MatePad Pro 10.8和12.6的区别

    MatePad Pro 10.8英寸:机身尺寸为246x159x7.2mm,机身重量约为460克. MatePad Pro 12.6英寸:机身尺寸为286.5x184.7x6.7mm,机身重量约为60 ...

  9. 【高通SDM660平台 Android 10.0】(12) --- Camera Chromatix 代码分析

    [高通SDM660平台 Android 10.0]Qcom Camera Daemon 代码分析 一.chromatix_imx258_lc898217xc 目录 1.1 例:imx258_lc898 ...

  10. 2021年10月到12月一个月学习总结2

    12月12日 1.我们经常无意识的做出选择:比如生气,打人,心情恶略等等: 负面影响:比如头痛,不想做出选择,逃避现实: 2.要做有意识的选择:对己对人都有利:以有意识,取代无意识:确认新的价值观,认 ...

最新文章

  1. JDK和cglib动态代理代码示例
  2. mysqldatareader获取整行数据给datarow_SqlDataReader的用法(读取1整行)
  3. SAP BSP同本地硬件的集成
  4. 因为我的名字特殊大家都是用异样的眼光在看着我 04
  5. Mysql之数据库锁(表锁和行锁)详解
  6. [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]
  7. MIT新研究:基于基本运动能力让机器人自主学习,感知世界
  8. UItextView使用详解
  9. 标志着“神舟三号”口服液正式进入产业化阶段.
  10. 解析云产品SLA的价值
  11. mysql怎么做纵表,本文实例讲述了MySQL横纵表相互转化操作实现方法。分享给大家供大家参考,具体如下:先创建一个成绩表(纵表)create table user_scor...
  12. LINUX gdk/X11正确获取DPI/Resolution的函数
  13. 图像处理中的一阶偏导和二阶偏导
  14. WinForm通过Excel作为中间介质实现导入导出小工具
  15. 计算机考研转专业,申请美国研究生转专业有什么要求?
  16. 【UE4】给制作的小地图加上方向指针
  17. i english怎么样,家长讲讲自己的经历!
  18. FPM生成Allegro封装常见问题及解决方法
  19. RR 时间片轮转算法 (java)
  20. 人民警察警衔等级与肩章标志

热门文章

  1. 高新技术企业研发费用占比要求是多少
  2. uva12657 移动盒子
  3. 关于高分辨率屏幕中VMware虚拟机的一些问题的解决
  4. xshell4 设置自动记录日志
  5. android自适应屏幕翻转,Android中正确自适应屏幕翻转
  6. clickhouse PARTITION操作
  7. mysql根据类型和数据正负进行分组
  8. 建模练习——扇贝单词
  9. 微信小游戏开新手攻略
  10. [ACL22] HIBRIDS:Hierarchical Biases for Structure-aware Long Document Summarization 阅读笔记