1. 什么是LNMP?
LNMP是一套技术的组合, L=Linux N=nginx M~=Mysql P~=PHP
2. LNMP架构是如何工作的?
首先nginx服务是不能处理动态请求的,那么当用户发起动态请求时,nginx是如何处理的?
当用户发起http请求时,请求会被nginx处理,如果是静态资源请求nginx则直接返回html,如果是动态请求(*php)nginx则通过fastcgi协议转交给后端的php处理,具体如下图所示
image.png
image.png
3. Nginx与PHP、Mysql之间是如何工作的(请看下图)
image.png
1. Nginx会根据用户请求进行location规则匹配。
2. location匹配如果是静态请求,则由Nginx读取本地直接返回
3. 如果请求的是动态资源,则由nginx将请求交给fastcgi协议
4. fastcgi收到请求后交给php-fpm管理进程,php-fpm进程会调用工作进程
5. 工作进程调用php程序进行解析,如果只是解析代码,php直接返回
6. 如果是要查询数据库,则由php程序连接数据库(通过用户名密码 IP)发起查询的操作
7. 最终数据由mysql->php->php-fpm->fastcgi->nginx->http->user
动态资源与静态资源
静态资源: 当用户多次访问这个资源,资源的源代码永远不会改变的资源。(视频、图片)
动态资源: 当用户多次访问这个资源,资源的源代码可能会发送改变。(文章、帖子、评论)
安装操作
1.安装 php
- 有很多版本,我们选择安装7.1、Mysql | mariadb(同一个作者)
1.1 清理环境
yum remove php-mysql-5.4 php php-fpm php-common
1.2 配置yum源 并安装
[root@nginx ~]# 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
#安装PHP(注意官方的名字是没有71w封装版本的时候写上的)
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
#安装mariadb(与Mysql是同一个作者)
yum install mariadb mariadb-server -y
2. 启动(先启动遇到问题解决问题)
# 启动PHP
systemctl enable php-fpm
systemctl start php-fpm
# 启动mariadb
systemctl start mariadb
systemctl enable mariadb
3.nginx与php如何集成的
- 1.在nginx配置
[root@web01 php]# cat /etc/nginx/conf.d/php.zy.com.conf
server {
listen 80;
server_name php.zy.com;
root /code;
#当用户请求php.zy.com --> php.zy.com/index.php
location / {
index index.php;
}
#将请求转给php-fpm程序,同时携带我们需要被解析的文件路径 SCRIPT_FILENAME = /code/index.php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 重启服务
[root@web01 php]# nginx -t
[root@web01 php]# systemctl restart nginx
- 编写php代码(创建/code/page.php文件并在里边加一个函数,显示php信息的一个函数)
[root@web01 php]# mkdir /code && vim /code/page.php
<?php
phpinfo();
?>
- 4.访问测试(浏览器访问php.zy.com.com)
image.png
4.php与mariadb如何集成的
- 1.启动mariadb
systemctl start mariadb
systemctl enable mariadb
- 2.配置用户名密码
[root@web01 php]# mysqladmin -uroot password zy.com
# 验证密码(是否能按照设置的用户名密码进入数据库)
[root@web01 php]# mysql -uroot -pzy.com
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
- 3.编写php代码连接mysql的代码,访问测试(就是为了验证php与mariadb连接成功)
[root@web01 php]# cat /code/mysql.php
<?php
//设定变量
$servername = "localhost";
$username = "root";
$password = "zy.com";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQL数据库成功";
?>
5. 使用架构
部署wordpress
1.准备wordpress的代码 放到某个指定的位置
[root@web01 ~]# mkdir /code
[root@web01 ~]# tar xf wordpress-5.2.3-zh_CN.tar.gz -C /code/
[root@web01 ~]# ll /code/
drwxr-xr-x 5 oldman oldman 4096 9月 5 2019 wordpress
- 授权代码的权限为www
[root@web01 ~]# chown -R www.www /code/wordpress/
3.配置mariadb,创建一个库
[root@web01 ~]# mysql -uroot -pzy.com
MariaDB [(none)]>
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress | <----
+--------------------+
5 rows in set (0.00 sec)
- 配置nginx,添加一个wordpress的网站
[root@web01 ~]# cat /etc/nginx/conf.d/blog.zy.com.conf
server {
listen 80;
server_name blog.zy.com;
root /code/wordpress;
client_max_body_size 100m;
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;
}
}
- 重启服务
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx
- 使用浏览器访问,有问题解决问题
hosts劫持
部署wecenter项目
1.下载并解压代码,并授权代码权限
[root@web01 ~]# mkdir -p /code/zh
[root@web01 ~]# unzip WeCenter_3-5-0.zip -d /code/zh/
[root@web01 ~]# chown -R www.www /code/zh/
- 创建对应的数据库
[root@web01 ~]# mysql -uroot -pzy.com #登录本地数据库
MariaDB [(none)]> create database zh; #创建一个zh的库
- 编写Nginx配置文件,创建wecenter网站
[root@web01 ~]# cat /etc/nginx/conf.d/zh.zy.com.conf
server {
listen 80;
server_name zh.zy.com;
root /code/zh;
location / {
index index.php;
}
#解析php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4.重启服务
[root@web01 ~]# systemctl restart nginx
5.hosts劫持
6.浏览器测试访问