一、实战

systemctl centos7
ipaddress 192.168.80.2
wordpress-verison wordpress-5.3.2-zh_CN
php-version 7.1
nginx-version yum安装-官方最新
//统一用户www,提前创建
groupadd -g 666 www;
useradd -u 666 -g 666 -M -s /sbin/nologin www;

1、安装

安装nginx

//用官方的yum源
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true [nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true //安装
yum -y install nginx //更改主配置文件的启动用户
[root@nginx conf.d]# vim /etc/nginx/nginx.conf
user www; //编写站点文件
[root@nginx conf.d]# vim default.conf
server {
listen 80;
server_name localhost; location / {
root /code;
index index.php;
}
location ~ \.php$ {
root /code;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
} //创建站点目录
mkdir /code //上传wordpress-5.3.2-zh_CN,unzip解压到/code目录
[root@nginx code]# mv wordpress/* ./ //更改权限
[root@nginx code]# chown -R www:www /code //启动
systemctl start nginx
systemctl enable nginx //检查
ss -tnlp | grep 80
ps aux | grep nginx

数据库

//安装启动,设置密码
yum -y install mariadb-server mariadb
systemctl start mariadb
mysql_secure_installation #初始化并设置密码 //创建wordpress数据库
create database wordpress; //创建wordpress用户对wordpress数据库的授权
grant ALL on wordpress.* to wordpress@'localhost' identified by 'cba-123';

php

腾讯云提供的方法(亲测好用):

rpm -Uvh https://mirrors.cloud.tencent.com/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y install php70w php70w-opcache php70w-mbstring php70w-gd php70w-xml php70w-pear php70w-fpm php70w-mysql php70w-pdo //编写配置谁的,保证nginx进程和php进程的用户一致
vim /etc/php-fpm.d/www.conf
user = www group=www //启动进程
systemctl start php-fpm //ps -aux 检查
ss -tnlp | grep 9000

yum-php7.3版本(新测好用):

yum -y install epel-release
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum -y install yum-utils yum install -y php73-php-fpm php73-php-cli php73-php-bcmath php73-php-gd php73-php-json php73-php-mbstring php73-php-mcrypt php73-php-mysqlnd php73-php-opcache php73-php-pdo php73-php-pecl-crypto php73-php-pecl-mcrypt php73-php-pecl-geoip php73-php-recode php73-php-snmp php73-php-soap php73-php-xml systemctl enable php73-php-fpm
systemctl start php73-php-fp rpm -ql php73-php-fpm-7.3.6-1.el7.remi.x86_64

老男孩教育提供方法(使用之后,wordpress不正常,样式丢失)

//卸载旧的php
yum remove php-mysql php php-fpm php-common //使用专用的php源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm //开始安装php
yum install -y 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进程的用户一致
vim /etc/php-fpm.d/www.conf
user = www nginx=www group=www //启动进程
systemctl start php-fpm //ps -aux 检查
ss -tnlp | grep 9000

wordpress

搭建

在浏览器上通过ip地址即可访问

管理URL:http://192.168.80.2/wp-admin/

报错解决

上传大文件时报413的错误,原因是因为默认文件大小是有限制的,我们只要更改一下限制就可以了。

//修改php-ini的配置文件
vim /etc/php.ini
upload_max_filesize = 50M //更改网站的配置文件
vim /etc/nginx/conf.d/default.conf
client_max_body_size 50m; #在server标签下加这么一行

2、三者建立联系

nginx和php建立联系

[root@web01 conf.d]# cat default.conf
server {
listen 80;
server_name www.zhanghe.com;
location / {
root /code;
index index.html index.htm;
}
location ~ \.php$ { #匹配php结尾的文件,通过cgi接口交给php
root /code;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #重点,携带完整的URL
fastcgi_pass 127.0.0.1:9000; #交给php
include fastcgi_params; #变量所在的文件,与上面fastcgi相配合
}
}
systemctl restart nginx
mkdir /code
cd /code
vim index.php
<?php
phpinfo();
?>

192.168.80.2/index.php访问时会打印一个紫色的表格

php与mariadb建立关系

[root@nginx code]# pwd
/code
[root@nginx code]# cat index.php
<?php
$servername = "localhost";
$username = "root";
$password = "cba-123"; $conn = mysqli_connect($servername,$username,$password);
if ($conn) {
echo "mysql successful by root !\n";
}else{
die("connection failed:" .mysqli_connect_error());
}
?>

访问: http://192.168.80.2/index.php ,结果如果成功了就会提示:“ mysql successful by root ! ”

二、数据分离

我们通过worpdress写的文章内容有图片,也有文字,用户账户信息和文字被存放至mysql数据库里面了,而像图片就没有被存放进mysql里面,而是存放在目录当中,在wordpress的主站点里面的wp-content目录里面。

我们可以这么做,我们可以把整个站点目录迁移到NFS存储上,然后把数据库也迁移到专门的数据库存储上,在WEB服务器通过NFS挂载站点目录,然后修改wordpress的配置文件连接远程的数据库,所以至少需要准备三台主机。

准备环境

web服务器 192.168.80.2
NFS服务器 192.168.80.3
MYSQL 192.168.80.4

第一步:我们先在要NFS服务器上搭建好NFS服务,然后将WEB服务器中的站点目录里面的内容全部迁移到NFS共享的目录当中,然后共享此目录。

第二步:在web服务器中将wordpress数据库导出,然后在mysql服务器导入,设置好权限。

第三步:在web服务器上挂载NFS共享的站点目录,并修改站点目录内worpdress的配置文件中的数据库指向,重启nginx服务,查看效果。

过程过于简单,所以演示过程就略过了……

三、理论

静态和动态

  • 静态资源:客户端从服务器获得的资源的表现形式与原文件相同。

  • 动态资源:通常是程序文件,需要在服务器执行之后,将执行的结果返回给客户端。

怎样理解这个静态呢?HTTPD程序接入到客户端的请求之后就是把客户端要请求的内容返回给客户端,其它的事情都没有做,只是做了I/0,内容没有发生改变,这就是静态资源。

web应用与php

httpd收到用户的请求之后,通过httpd的过滤功能(通常是后缀扩展名)可以区分出客户端请求的是静态资源还是动态资源,如果客户端请求的是静态资源的话(比如是html结尾的文件),httpd自己就可以发起系统调用完成响应;如果httpd识别出客户端请求的资源是一个以php或者.sh结尾的文件呢?httpd本身是无能无力的,它总不能把这个php结尾的源码文件发送给客户端吧,但是httpd程序有自己又不能执行php的文件,所以httpd需要与php解释器进行联动让php解释器把客户请求的程序执行一次,然后把结果返回给httpd进程,然后httpd进程再封装返回给客户端。那么httpdphp解释器是两个程序,那么怎样联动呢?

httpdphp解释器是两个不同的程序,就像两个说不同语言的人,相互谁也不理解谁,它们两个要想联动的话,就必须有统一的“交流语言”,这种情况在计算机的领域是非常常见的,都是使用协议来解决的,httpdphp之间都运行cgi协议,所谓的cgi协议就是“通用网关接口”,httpd可以通过加载一个模块来支持此协议,而php也是基于此协议来开发的,所以它们之间是可以相互交流的。

httpdphp在交流时的过程是这样的:

  1. httpd把客户端发过来动态资源请求通过cgi协议封装成请求包发送给php解释器

  2. php解释器收到之后会通过系统调用,然后IO,运行并处理引用户的动态资源,并通过数据流把结果发送给httpd程序,在这里需要注意,httpd加载静态资源的时候虽然加载的也是一个文件,但是实际就是一段数据流而已,当httpd收到来自php的响应报文时,收到的实际上也中是一段数据流,文件只是我们凭空想像出来的。

  3. httpd程序然后进行封装之后响应给客户端

总结

httpd像是客户端向php(服务器)发送请求,php做为服务器进行回应,httpd活生生像一个客户端!

换个角度再看,httpd就像是一个代理,对于动态资源的请求仅做一个转发作用,httpd活生生像一个代理!

php与mysql

php与数据库系统进行联动

php与数据库也是八竿子打不着的两个程序,它们怎样才一起联动呢?在这里并没有使用协议来解决这个问题,而是使用库调用来解决这个问题的。假设以php与mysql进行联动来说明吧!

php程序本身的确无法与mysql进行联动,php还需要加载一个驱动模板,这个驱动模块可能叫做php-mysql,如果数据库是甲骨文数据库,那么php要调用 php-甲骨文模块进行调用才与与甲骨文进行联动,因为php只有通过这个模块向相应的数据库系统发送的数据相应的数据库才能看懂,所以在安装php的时候,不要忘记安装这样一个驱动模块。

[root@www init.d]# yum list all | grep php-mysql
php-mysql.x86_64 #这个就是php与mysql交互的驱动模块

它们之间的关系也类似于客户端与服务器的关系,php向mysql请求,而mysql对php进行回应。

  1. 当客户端通过http协议向apache发来请求

    如果是静态资源,直接发起系统调用

    如果是动态资源,通过php模块/cgi/fastcgi任意一种方式发请求包交给php

  2. 当php收到之后apache的请求之后:

    如果所请求的资源都存储在硬盘上,那么php直接发起系统调用,将文件调用到内存并执行,执行完成之后把结果通过数据流交给apache,然后apache再回复客户端。

    如果所请求的资源有程序硬盘上,还有一部分数据在数据库当中,如下。

  3. 当php发的请求数据到达mysql

    mysql会通过各级索引找到数据,通过响应包回复给php,php通过在磁盘当中调用一部分程序,加上从mqsql回复的这部分数据,结合起来之后就可以运行,运行完成之后把结果交给apache

nginx通过fastcgi接口与php交互,将用户的动态请求交给php处理。

php-fpm进程就用来接收nginx发送过来的动态请求,fpm进程不会处理,真正处理的进程是wrapper进程,有些php请求wrapper可以直接进行处理,处理后再通过php-fpm返回给nginx,但是还有一些需要调用数据库的,php-ini就负责与数据库沟通。

LNMP(5)的更多相关文章

  1. LNMP(三)

    第二十二次课 LNMP(三) 目录 一.Nginx负载均衡 二.ssl原理 三.生成ssl密钥对 四.Nginx配置ssl 五.php-fpm的pool 六.php-fpm慢执行日志 七.open_b ...

  2. centos7搭建docker并部署lnmp (转)

      1.首先呢先更新yum源 yum -y update 2.1.安装docker存储库 yum install -y yum-utils \ device-mapper-persistent-dat ...

  3. VPS及LNMP(一)

    1.试用了搬瓦工.interserver.天翼云.网安互联之后,分别写下感受: 前两个是美国服务器,天翼云是国内服务器,网安互联是香港主机. a.搬瓦工非常便宜,512M的1年9.99刀,但是用了之后 ...

  4. zabbix安装、部署、lnmp(一)

    最近入手zabbix,准备好好的研究,好好的弄.   环境准备: mysql:5.6.29 PHP:5.6.12 Nginx:1.8.0 zabbix:3.2.6 操作系统:Centos6 用户:普通 ...

  5. 生产环境LNMP (交友)

    一. 下载一键安装包 LNMP   官方地址为:http://lnmp.org/ 原生产环境为 : php5.4.32  mysql 5.5  nginx 1.40   我们用LNMP包安装相应的环境 ...

  6. Linux记录-批量安装LNMP(转载)

    #!/bin/bash # Describe: This is a one - button installation service script # 提示:使用此脚本时,尽量先选择第一项配置Yum ...

  7. 一键安装lnmp(2)

    all(){path=`pwd`cd $pathechoecho "exclude=*.i386 *.i686" >> /etc/yum.confrpm -ivh ht ...

  8. 一键安装lnmp(1)

    #!/bin/bash#author:zhaocl#Software directory:$pathpath=`pwd`cd $path. $path/cacti.sh. $path/nginx.sh ...

  9. centos7 安装LNMP(php7)之 nginx php-fpm yum安装以及配置文件修改

    PHP7.1.6整体参考 https://www.zhihu.com/question/50615606/answer/145699091 http://www.bubuko.com/infodeta ...

随机推荐

  1. Linux IO多路复用之epoll网络编程

    前言 本章节是用基本的Linux基本函数加上epoll调用编写一个完整的服务器和客户端例子,可在Linux上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一 ...

  2. Nginx(一)--nginx的初步认识及配置

    什么是Nginx 是一个高性能的反向代理服务器正向代理代理的是客户端反向代理代理的是服务端 Apache.Tomcat.Nginx 静态web服务器jsp/servlet服务器 tomcat 安装Ng ...

  3. Element UI 源码—— Carousel 走马灯学习

    参考博客:https://segmentfault.com/a/1190000014384638?utm_source=tag-newest

  4. 6张图说清楚Tomcat原理及请求流程

    前言 很多东西在时序图中体现的已经非常清楚了,没有必要再一步一步的作介绍,本文以图为主,然后对部分内容加以简单解释. 绘制图形使用的工具是 PlantUML + Visual Studio Code ...

  5. 在 Windows 10 上搭建 Cordova 跨平台开发 Android 环境

    目录 安装 Cordova 安装 Java 和 Android 环境 创建 Cordova 应用程序 构建和运行 Cordova Cordova 简介:Cordova 原名 PhoneGap,是一个开 ...

  6. var和let部分浅析

    ES6中新增了let命令,用于声明变量,但所声明的变量只在let命令的代码块内有效. 举个例子: var a = []; for(var i=0;i<10;i++){ a[i] = functi ...

  7. Docker+DokcerFile 简单命令和简单镜像配置----Tomcat+jdk+centos7

    宿主机描述:docker info (自身的描述)docker --helpdocker images(查看所有镜像)docker images -adocker images -q(显示镜像ID)d ...

  8. vue父组件传值给子组件

    一.父传子 方式一 父传子主要通过在父组件v-model绑定数据,在子组件进行用props进行数据的接收 父组件 <template> <div id="container ...

  9. Vue ES6箭头函数使用总结

    Vue ES6箭头函数使用总结   by:授客 QQ:1033553122   箭头函数 ES6允许使用“箭头”(=>)定义函数: 函数不带参数 定义方法:函数名称 = () => 函数体 ...

  10. SAP QM 主检验特性主数据关键字段解释

    SAP QM 主检验特性主数据关键字段解释 检验特征是QM模块中的一项重要主数据,可以说是QM检验业务的构成基础,它通过体现在Task list (检验任务清单)和/或material specifi ...