博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LNMP基础架构
阅读量:6801 次
发布时间:2019-06-26

本文共 8313 字,大约阅读时间需要 27 分钟。

hot3.png

[toc]

LNMP基础架构

12.1 LNMP架构介绍

架构原理:

LAMP=linux+apache+mysql+php

LNMP=linux+nginx+mysql+php

扩展 Nginx为什么比Apache Httpd高效:原理篇 apache和nginx工作原理比较 mod_php 和 mod_fastcgi以及php-fpm的比较 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM

1.初识LNMP

当我们讲LAMP的时候PHP是作为一个模块在Apache中,但是在LNMP中,PHP是一个服务,当用户请求的时候nginx会把它交给php 然后对mysql进行交互!像这种静态的,例如图片或者html,nginx会直接处理,从而加快访问速度! 谈到速度,其实如果一个普通的站点你是看不到什么效果的,但是如果要是访问一个纯静态站点,nginx就能体现出它的优势!nginx的另外一个优势得益于它的高并发支持!

mark

  • 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫做php-fpm

  • LNMP架构是指:Linux、Nginx、Mysql、PHP。与LAMP架构类似,只不过Apache服务器由Nginx代替。

  • 与LAMP不同的是,LNMP的Web服务是由Nginx提供的。其中php是作为独立的服务进程存在的:即php-fpm,而不是像LAMP一样php只是Apache的一个模块形式。

LNMP处理请求过程:

  • 1、用户浏览器发起访问请求。

  • 2、服务器收到请求后,Nginx服务处理静态请求,如图片、css等。

  • 3、Nginx把动态请求发给php-fpm服务,由他进行处理。

  • 4、php-fpm与mysql进行数据库交互。

  • 5、Nginx把静态动态请求处理结果返回给用户。

Nginx比Apache在静态处理性能方面强很多,特别是图片多的网站用户并发可以上几万。Apache做不到这点性能。

Nginx直接处理静态请求,动态请求会转发给php-fpm

2.MYSQL 安装过程

2.1 获取安装包,并解压

[root@xavi ~] ps aux |grep mysql //安装前先确定mysql是否开启root       1082  0.0  0.0 115392  1672 ?        S    21:09   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/xavi.pidmysql      1375  3.8 24.2 1302876 452908 ?      Sl   21:09   0:03 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/xavi.err --pid-file=/data/mysql/xavi.pidroot       2645  0.0  0.0 112680   976 pts/0    R+   21:10   0:00 grep --color=auto mysql[root@xavilinux01 ~]# cd /usr/local/src[root@xavi src]# rm -rf /usr/local/mysql //把之前的删除[root@xavi src]# rm -rf /etc/init.d/mysqld[root@xavilinux01 src]# wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz [root@xavilinux01 src]# tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz[root@xavilinux01 src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql[root@xavi src]# ls /usr/local/mysql/bin      data  include  man         README   share      support-filesCOPYING  docs  lib      mysql-test  scripts  sql-bench

2.2 进入mysql目录下,删除之前/data/mysql/下的文件

[root@xavi ~]# cd /usr/local/mysql[root@xavi mysql]# ls /data/mariadb  mysql  wwwroot[root@xavi mysql]# id mysqluid=1004(mysql) gid=1005(mysql) 组=1005(mysql)[root@xavi mysql]# rm -rf /data/mysql/*

2.3 配置文件./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

出现两个OK

mark

2.4 拷贝编辑cp support-files/my-default.cnf /etc/my.cnf

mark

2.5 拷贝启动脚本并编辑 cp support-files/mysql.server /etc/init.d/mysqld

  • 编辑 vim /etc/init.d/mysqld

vim编辑下面两行basedir和datadir配置 basedir=/usr/local/mysql datadir=/data/mysql

mark

2.6 启动mysqld,/etc/init.d/mysqld start

报错:

root@xavi mysql]# /etc/init.d/mysqld startStarting MySQL.Logging to '/data/mysql/xavi.err'... ERROR! The server quit without updating PID file (/data/mysql/xavi.pid).

sql启动报错参考:

2.7 kill -9 PID 杀死占用mysql的进程,然后开启

查找出之前报错的原因,mysql进程没有关闭

[root@xavi mysql]# ps -ef|grep mysqldroot       1082      1  0 21:09 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/xavi.pidmysql      1375   1082  0 21:09 ?        00:00:13 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/xavi.err --pid-file=/data/mysql/xavi.pidroot       4433   2598  0 22:23 pts/0    00:00:00 grep --color=auto mysqld[root@xavi mysql]# kill -9 1082[root@xavi mysql]# ps -ef|grep mysqldmysql      1375      1  0 21:09 ?        00:00:13 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/xavi.err --pid-file=/data/mysql/xavi.pidroot       4444   2598  0 22:23 pts/0    00:00:00 grep --color=auto mysqld[root@xavi mysql]# kill -9 1375[root@xavi mysql]# ps -ef|grep mysqldroot       4447   2598  0 22:24 pts/0    00:00:00 grep --color=auto mysqld[root@xavi mysql]# /etc/init.d/mysqld startStarting MySQL. SUCCESS!

将mysql添加到开机启动项

[root@xavi mysql]# chkconfig --add mysqld[root@xavi mysql]# chkconfig mysqld on[root@xavi mysql]# service mysqld stopShutting down MySQL.. SUCCESS! [root@xavi mysql]# service mysqld startStarting MySQL. SUCCESS!

12.3 PHP安装

和LAMP安装PHP方法有差别,需要开启php-fpm服务

1. 配置并编译:

进入src目录下,查看之前已经下载了哪些安装包

[root@xavi src]cd /usr/local/src/[root@xavi src]# lsapr-1.6.3apr-1.6.3.tar.gzapr-util-1.6.1apr-util-1.6.1.tar.gzhttpd-2.4.29httpd-2.4.29.tar.gzmariadb-10.2.6-linux-glibc_214-x86_64.tar.gzmysql-5.5.55mysql-5.5.55.tar.gzmysql-5.6.35-linux-glibc2.5-x86_64.tar.gzmysql-5.6.36-linux-glibc2.5-x86_64.tar.gzphp-5.6.30php-5.6.30.tar.bz2php-5.6.30.tar.gzphp-5.6.30.tar.gz.1php-7.1.6php-7.1.6.tar.bz2phpredis-developphpredis-develop.zip

打开php-5.6.50源码包(之前LAMP架构中已经下载),make clean

[root@xavi src]# cd php-5.6.30/[root@xavi php-5.6.30]# ls[root@xavi php-5.6.30]# make cleanfind . -name \*.gcno -o -name \*.gcda | xargs rm -ffind . -name \*.lo -o -name \*.o | xargs rm -ffind . -name \*.la -o -name \*.a | xargs rm -f find . -name \*.so | xargs rm -ffind . -name .libs -a -type d|xargs rm -rfrm -f libphp5.la sapi/cli/php sapi/cgi/php-cgi    libphp5.la modules/* libs/*

将这里用的php命名为php-fpm,添加配置文件

[root@xavi php-5.6.30]# ls /usr/local/apache2.4  apr-util  etc    include  lib64    mariadb  php   sbin   srcapr        bin       games  lib      libexec  mysql    php7  share[root@xavi php-5.6.30]#useradd -s /sbin/nologin php-fpm[root@xavi 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--prefix=指定安装位置--with-config-file-path=指定配置文件目录--enable-fpm=启动fpm服务--with-fpm-user=指定用户--with-fpm-group=指定用户组--with-mysql=指定mysql的路径

报错处理,安装devel安装包,安装完重新加载配置文件,然后make&make install

<curl-dir>

configure: error: Please reinstall the libcurl distribution -    easy.h should be in 
/include/curl/
  • 安装 :yum install libcurl-devel

3 PHP信息:

[root@xavi php-5.6.30]# ls /usr/local/php-fpm bin  etc  include  lib  php  sbin  var[root@xavi php-5.6.30]# ls /usr/local/phpbin  etc  include  lib  php

安装下来之后我们发现其实比之前安装PHP要多了两个目录 sbin 和 var

sbin:实际上就是启动php-fpm服务的目录

var:实际上就是存放PHP日志的,当然这个我们可以指定的

查看PHP信息:/usr/local/php-fpm/sbin/php-fpm -i

查看PHP模块:/usr/local/php-fpm/sbin/php-fpm -m

测试PHP配置语法:/usr/local/php-fpm/sbin/php-fpm -t

4. 配置PHP:

cp php.ini-production /usr/local/php-fpm/etc/php.ini//牢记此命令,后期会经常使用到

4.1 编辑:vi /usr/local/php-fpm/etc/php-fpm.conf

[global]                //全局配置pid = /usr/local/php-fpm/var/run/php-fpm.pid                //定义PIDerror_log = /usr/local/php-fpm/var/log/php-fpm.log        //错误日志[www]                    //模块名字,启动服务的时候就能看到listen = /tmp/php-fcgi.sock        //监听的地址#linsten = 127.0.0.1:9000listen.mode = 666        //当监听的是sock的时候,这个语句才会生效,这个语句用来定义sock文件权限的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[global]=定义全局参数[www]=自定义模块listen = 监听的地址或者可以使用这样的方式↓listen = 127.0.0.1:9000 (port默认为9000,也可以更改)listen.mode = 666 用来定义listen = /tmp/php-fcgi.sock的权限,只有这个sock打开的情况下才生效!

linsten 可以监听sock、tcp 可以写成 linsten = 127.0.0.1:9000(默认端口就是9000,可自定义),一般监听的到是“127.0.0.1 ”IP,因为php-fpm这个服务是针对内部使用的、在本机上用的,也就是说Nginx和php通常是在一台机器上,两者之间通信直接使用内部网络就可以了;在这块选择的linsten配置不同,到之后的配置Nginx配置,也就是告诉Nginx到哪里找php的配置语句也是不同

mark

如图,nginx在练习php-fpm和mysql时有两种方式,一直是ip:port,IP+端口;另一种是socket。如果在一台机器上(nginx和php-fpm,mysql),两种都可以用,但是如果不在一台机器上,用socke是无效的

4.2拷贝启动脚本,先到源码包目录,脚本为sapi/fpm/init.d.php-fpm

[root@xavi php-5.6.30]# cd /usr/local/src/php-5.6.30/[root@xavi php-5.6.30]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

赋予权限,修改开机启动项

[root@xavi php-5.6.30]# chmod 755 /etc/init.d/php-fpm[root@xavi php-5.6.30]# chkconfig --add php-fpm[root@xavi php-5.6.30]# chkconfig php-fpm on[root@xavi php-5.6.30]# service php-fpm startStarting php-fpm  done

mark

转载于:https://my.oschina.net/u/3960917/blog/2960975

你可能感兴趣的文章
taskset - retrieve or set a process's CPU affinity (affect SYSTEMTAP TIME)
查看>>
SpringBoot2 | SpringBoot启动流程源码分析(二)
查看>>
MyBatis 原理浅析——基本原理
查看>>
第七章:SpringCloud Feign对hystrix的支持
查看>>
从零开始学习hadoop之发行版选择
查看>>
Redis radix tree源码解析
查看>>
数组和链表
查看>>
撩课-Java面试宝典-第三篇
查看>>
阿里云前端周刊 - 第 13 期
查看>>
给你一份架构部操作手册,你会用么?
查看>>
接口Deque <E>
查看>>
线程安全的无锁RingBuffer
查看>>
移动安全-iOS(二)
查看>>
有趣的Linux命令
查看>>
04 | 深入浅出索引(上)
查看>>
破解 Kotlin 协程(7) - 序列生成器篇
查看>>
React 生命周期
查看>>
App 瘦身 项目实践
查看>>
基于vue2.0+ 抽奖项目
查看>>
线程和进程基础以及多线程的基本使用(iOS)
查看>>