关于LNMP知识:
1.LNMP的介绍:
在2010年以前,互联网最常用的经典Web服务环境组合就是
LAMP(即时Linux,Apache,Mysql,PHP),近几年随着Nginx Web服务的
逐渐流行,出现了LNMP全称为Linux、Nginx、Mysql、PHP首字母缩写。
2.LNMP的工作流程:
1)当LNMP组合工作时,首先是用户通过浏览器输入域名请求Nginx Web服务,
如果请求是静态的资源,则是Nginx解析返回给客户。
2)如果是动态请求(.php结尾),那么Nginx就会把它通过FAstcgi接口(生产常用方法)
发送给PHP引擎服务(Fastcgi进程php-fpm)进行解析。如果这个请求要读取数据库数据,
那么PHP就会继续向后请求Mysql数据库,以读取需要的数据,并最终通过Nginx服务
把获取的数据返回给用户,这就是LNMP环境的基本顺序流程,这个请求流程就是企业使用
LNMP环境的常用流程。
==============================================================================
3. Nginx与PHP、MySQL之间是如何工作的
1)用户通过http发出请求,请求会先抵达LNMP架构中的Nginx
2)Nginx会根据用户的请求进行判断,这个判断由location进行完成
3)判断用户请求是静态页面,Nginx直接进行处理
4)判断用户请求的是动态页面,Nginx会交给fastcgi协议下发
5)fastcgi协议会将请求交给php-fpm管理进程处理,php-fpm管理进程
会调用具体的工作进程warrap
6)warrap会调用php程序进行解析,如果是解析代码会直接返回
==============================================================================
4.安装LNMP架构
1)配置yum源
[root@web01 ~]# cat /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
yum install nginx -y
yum remove php-mysql-5.4 php php-fpm php-common
yum -y install php71w php71w-cli php71w-common php71w-devel
php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo
php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached
php71w-pecl-redis php71w-pecl-mongodb
启动nginx php-fpm
systemctl start nginx
systemctl start php-fpm
==============================================================================
5. Nginx与PHP集成的原理
1)编写能解析PHP的Nginx配置文件
[root@web01 conf.d]# cat php.sm.com.conf
server {
listen 80;
server_name php.sm.com;
root /code;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2)编写PHP代码,测试访问效果
[root@web01 conf.d]# cat /code/info.php
phpinfo();
?>
3)host劫持
==============================================================================
6.Mysql数据库介绍(可以单独拿出来使用)
1)Mysql是互联网领域里非常重要的,山手广大用户欢迎的一款 开源关系型数据库软件,
由瑞典Mysql AB公司开发与维护。2006年,Mysql AB公司被SUN公司收购。2008年,SUN公司
又被传统的数据库领域大佬甲骨文(orcle)公司收购。所以,Mysql数据库软件现在属于Oracle
公司,但依然是开源的。
Mysql数据库的最常用标准化语言为SQL结构化查询语言。
2)为什么选择Mysql数据库
目前,绝大多数使用Linux操作系统的互联网企业都在使用Mysql作为后端的数据库,
从大型的BAT门户,到电商门户平台,分类门户平台等无一例外。mysql数据库到底有什么
优势和特点呢?
(1)性能卓越,服务稳定,很少出现异常宕机
(2)开放源代码且无版权制约,自主性强,使用成本低。
(3)历史悠久,社区及用户非常活跃,遇见问题,可以很快获取帮助。
(4)软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
(5)支持多种操作系统,提供多种API接口,支持多种开发语言,特别是
对流行的PHP语言无缝支持。
(6)品牌口碑效应,使得企业无需考虑直接用。
===============================================================================
7.安装Mysql数据库
1)Mysql的安装方法,常见的方法:
(1)yum/rpm 包安装
特点:简单、速度快,但是没法定制安装,入门新手采用。
(2)二进制安装
特点:解压软件简单配置后就能使用,不用安装,速度较快
例如:mysql-5.5.32-linux2.6-x86_64.tar.gz
(3)源码编译安装
特点:是可以定制安装参数,但是安装时间长
例如软件名:mysql-5.5.32.tar.gz
(4)源码软件结合/yum/rpm来安装
特点:把源码软件制作成符合要求的rpm,放到yum仓库里,然后
通过yum来安装。
注意:
1)建议和Nginx服务安装在同一机器上。
2)重视操作过程的报错输出,有错误要解决掉再继续,不能忽略编译中的错误。
=========================================================================
2)Mysql的二进制安装:
(1)创建软件目录:
[root@db01 ~]# mkdir -p /app/
上传软件到此目录
(2)解压并改名为mysql
[root@db01 app]# mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql
[root@db01 app]# ls -l /app/mysql/
total 36
drwxr-xr-x 2 root root 4096 Mar 4 14:55 bin
-rw-r--r-- 1 7161 31415 17987 Sep 13 2017 COPYING
drwxr-xr-x 2 root root 55 Mar 4 14:55 docs
drwxr-xr-x 3 root root 4096 Mar 4 14:55 include
drwxr-xr-x 5 root root 229 Mar 4 14:55 lib
drwxr-xr-x 4 root root 30 Mar 4 14:55 man
-rw-r--r-- 1 7161 31415 2478 Sep 13 2017 README
drwxr-xr-x 28 root root 4096 Mar 4 14:55 share
drwxr-xr-x 2 root root 90 Mar 4 14:55 support-files
修改环境变量:
vim /etc/profile
export PATH=/app/mysql/bin:$PATH
[root@db01 bin]# source /etc/profile
(3)建立mysql用户和组
useradd mysql
(4)创建相关目录并修改权限
mkdir /data/mysql -p
chown -R mysql.mysql /app/*
chown -R mysql.mysql /data/*
(5)初始化数据(建库)
初始化数据,初始化管理员的密码为空
\rm -rf /data/mysql/*
[root@db01 ~]# mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql
2019-04-18T03:37:43.146018Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-04-18T03:37:43.892132Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-04-18T03:37:43.970412Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-04-18T03:37:44.029490Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 5378f3b3-618b-11e9-9164-000c294234c8.
2019-04-18T03:37:44.041469Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-04-18T03:37:44.042348Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@db01 ~]# cd /data/mysql/
[root@db01 mysql]# ll
total 110628
-rw-r----- 1 mysql mysql 56 Apr 18 11:37 auto.cnf
-rw-r----- 1 mysql mysql 419 Apr 18 11:37 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Apr 18 11:37 ibdata1
-rw-r----- 1 mysql mysql 50331648 Apr 18 11:37 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 18 11:37 ib_logfile1
drwxr-x--- 2 mysql mysql 4096 Apr 18 11:37 mysql
drwxr-x--- 2 mysql mysql 8192 Apr 18 11:37 performance_schema
drwxr-x--- 2 mysql mysql 8192 Apr 18 11:37 sys
[root@db01 mysql]#
注释:5.6初始化的区别:
/application/mysql/scripts/mysql_install_db --user=mysql
--datadir=/application/mysql/data
--basedir=/application/mysql
======================================================================
(6)书写默认配置文件
vim /etc/my.cnf
[mysqld]
user=mysql
basedir=/app/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
prompt=3306 [\\d]>
(7)配置启动脚本:
[root@db01 mysql]# cd /app/mysql/support-files
[root@db01 support-files]# ./mysql.server start
Starting MySQL.Logging to '/data/mysql/db01.err'.
SUCCESS!
cp mysql.server /etc/init.d/mysqld
======================================================================
(8)使用systemd管理mysql
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
注意:将原来模式启动mysqld先关闭,然后再用systemd管理。
systemctl start/stop/restart/status mysqld
======================================================================
(9)安装后的简单管理
[root@db01 ~]# mysqladmin -uroot -p password 123
Enter password:
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text,
use ssl connection to ensure password safety.
5.6版本:
select user,password,host from mysql.user;
5.7 中用户基本信息
select user,authentication_string,host from mysql.user;
desc mysql.user;
======================================================================
(10) 小结:
1.版本 (主流版本的GA时间了解一下)
5.6 5.7
5.6.38 5.7.20
20170913
(1) 初始化方式变了
mysql_install_db
mysqld --initialize-insecure
(2) 用户安全
12位
180
4种复杂度
(3)密码字段
authentication_strings
2. 建库(初始化数据库)
mysqld --intialize-insecure --user=mysql
--basedir=/app/mysql --datadir=/data/mysql
3.简易的配制文件/etc/my.cnf
user
basedir
datadir
server_id
port
socket
4.管理员密码
mysqladmin -uroot -p password xx
===============================(mysql结束)====================================
8.FastCGI介绍:
1)什么是CGI
CGI的全称为“通用网关接口”(Common Gateway Interface),为HTTP
服务器与其他机器上的程序服务通信交流的一种工具,CGI程序需要运行在
网络服务器上。(很少用了)
2)什么是FastCGI:
FastCGI是一个可伸缩地、高速的在HTTP服务器和动态脚本语言间通信的接口。
在linux下,FastCGI接口(即为socket,这个socket可以是文件socket,也可以是
IP socket)。主要优点是把动态语言和HTTP服务器分离开来的,多数流行的HTTP
服务器都支持FastCGI,也包括Apache,Nginx,Lighttpd等。
FastCGI是采用的C/S架构。 FastCGI的主要优点是把动态语言和HTTP服务器
分离开来,使Nginx专门处理静态请求及向后转发的动态请求,而PHP/PHP-FPM服务器
则专门解析PHP动态请求。
==============================================================================
9.PHP与MySQL集成的原理
1)启动数据库
[root@web01 ~]# systemctl start mysql
2)配置连接密码
[root@web01 ~]# mysqladmin password sm@2019
3)测试登录mysql
[root@web01 ~]# mysql -uroot sm@2019
Mysql [(none)]>
4)编写php连接数据库的代码
[root@web01 ~]# /code/mysqli.php
$servername = "localhost";
$username = "root";
$password = "sm@2019";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQL数据库成功";
?>
5)可以直接使用php命令测试(也可以通过浏览器的方式去测试)
[root@web01 ~]# php /code/mysqli.php
==============================================================================
10.通过LNMP架构部署Wordpress
1)编写Nginx集成PHP的配置文件 (定义域名以及站点的目录位置)
[root@web01 conf.d]# cat blog.sm.com.conf
server {
listen 80;
server_name blog.sm.com;
root /code/wordpress;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2)根据Nginx配置,初始化环境,然后上传代码
1.准备站点目录
[root@web01 conf.d]# mkdir /code
2.下载wordpress代码
[root@web01 conf.d]# cd /code
[root@web01 code]# tar xf wordpress-5.2.3-zh_CN.tar.gz
3)创建数据库名
[root@web01 code]# mysql -uroot -p sm.com
Mysql [(none)]> create database wordpress;
Mysql [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
+--------------------+
5 rows in set (0.01 sec)
4)统一Nginx PHP的权限 为 www
[root@web01 code]# groupadd www -g 666
[root@web01 code]# useradd -u666 -g666 www
[root@web01 code]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@web01 code]# chown -R www.www /code
[root@web01 code]# systemctl restart nginx
[root@web01 code]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
[root@web01 code]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
[root@web01 code]# systemctl restart php-fpm
5)WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的
服务器上架设属于自己的网站。
==============================================================================