LNMP(5)
一、实战
| 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进程再封装返回给客户端。那么httpd与php解释器是两个程序,那么怎样联动呢?
httpd与php解释器是两个不同的程序,就像两个说不同语言的人,相互谁也不理解谁,它们两个要想联动的话,就必须有统一的“交流语言”,这种情况在计算机的领域是非常常见的,都是使用协议来解决的,httpd与php之间都运行cgi协议,所谓的cgi协议就是“通用网关接口”,httpd可以通过加载一个模块来支持此协议,而php也是基于此协议来开发的,所以它们之间是可以相互交流的。
httpd与php在交流时的过程是这样的:
httpd把客户端发过来动态资源请求通过cgi协议封装成请求包发送给php解释器php解释器收到之后会通过系统调用,然后IO,运行并处理引用户的动态资源,并通过数据流把结果发送给httpd程序,在这里需要注意,httpd加载静态资源的时候虽然加载的也是一个文件,但是实际就是一段数据流而已,当httpd收到来自php的响应报文时,收到的实际上也中是一段数据流,文件只是我们凭空想像出来的。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进行回应。
当客户端通过http协议向apache发来请求
如果是静态资源,直接发起系统调用
如果是动态资源,通过php模块/cgi/fastcgi任意一种方式发请求包交给php
当php收到之后apache的请求之后:
如果所请求的资源都存储在硬盘上,那么php直接发起系统调用,将文件调用到内存并执行,执行完成之后把结果通过数据流交给apache,然后apache再回复客户端。
如果所请求的资源有程序硬盘上,还有一部分数据在数据库当中,如下。
当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)的更多相关文章
- LNMP(三)
第二十二次课 LNMP(三) 目录 一.Nginx负载均衡 二.ssl原理 三.生成ssl密钥对 四.Nginx配置ssl 五.php-fpm的pool 六.php-fpm慢执行日志 七.open_b ...
- centos7搭建docker并部署lnmp (转)
1.首先呢先更新yum源 yum -y update 2.1.安装docker存储库 yum install -y yum-utils \ device-mapper-persistent-dat ...
- VPS及LNMP(一)
1.试用了搬瓦工.interserver.天翼云.网安互联之后,分别写下感受: 前两个是美国服务器,天翼云是国内服务器,网安互联是香港主机. a.搬瓦工非常便宜,512M的1年9.99刀,但是用了之后 ...
- zabbix安装、部署、lnmp(一)
最近入手zabbix,准备好好的研究,好好的弄. 环境准备: mysql:5.6.29 PHP:5.6.12 Nginx:1.8.0 zabbix:3.2.6 操作系统:Centos6 用户:普通 ...
- 生产环境LNMP (交友)
一. 下载一键安装包 LNMP 官方地址为:http://lnmp.org/ 原生产环境为 : php5.4.32 mysql 5.5 nginx 1.40 我们用LNMP包安装相应的环境 ...
- Linux记录-批量安装LNMP(转载)
#!/bin/bash # Describe: This is a one - button installation service script # 提示:使用此脚本时,尽量先选择第一项配置Yum ...
- 一键安装lnmp(2)
all(){path=`pwd`cd $pathechoecho "exclude=*.i386 *.i686" >> /etc/yum.confrpm -ivh ht ...
- 一键安装lnmp(1)
#!/bin/bash#author:zhaocl#Software directory:$pathpath=`pwd`cd $path. $path/cacti.sh. $path/nginx.sh ...
- centos7 安装LNMP(php7)之 nginx php-fpm yum安装以及配置文件修改
PHP7.1.6整体参考 https://www.zhihu.com/question/50615606/answer/145699091 http://www.bubuko.com/infodeta ...
随机推荐
- 如何手动实现TryInsert和InsertOrUpdate
在日常开发中,我们有时会需要对数据的插入操作进行定制.比如,如果表里已有某某记录就不写入新纪录,或者表里没该记录就插入,否则就更新.前者我们称为TryInsert,后者为InsertOrUpdate( ...
- 基于CC1606 FPGA评估板移植iCamera程序小结
iCamera作为柴草电子经典的摄像头开发工具,其强大的摄像头调试功能,深受广大网友喜爱,支持市面上各种摄像头. 目前现有的应用板卡支持:CC1601(CP601A). CC1602(CP601B) ...
- 还不懂MySQL索引?这1次彻底搞懂B+树和B-树
前言 看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引….或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree ...
- NodeJS2-1环境&调试----CommonJS
CommonJS 每个文件是一个模块,有自己的作用域 在模块内部module变量代表模块本身 module.exports属性代表模块对外接口 require规则 /表示绝对路径,./表示型对于当前文 ...
- chrome显示正常,IE报400的错
发现是因为参数里面有一个是中文,应该是IE没有转码,所以会报错,只要用encodeURI()实现转码即可
- CouchDB学习-集群管理
官方文档 集群管理 理论 在etc/fefault.ini文件中有以下部分: [cluster] q=8 n=3 q - 分片的数量 n - 每一份文档的拷贝数量(加上原文档一共几份副本) 创建数据库 ...
- ORACLE数据库中执行计划出现INTERNAL_FUNCTION一定是隐式转换吗?
ORACLE数据库中,我们会使用一些SQL语句找出存在隐式转换的问题SQL,其中网上流传的一个SQL语句如下,查询V$SQL_PLAN的字段FILTER_PREDICATES中是否存在INTERNAL ...
- Mongdb可视化工具Studio 3T的使用
一.官网地址 https://studio3t.com/ 二.下载和安装 点击DOWNLOAD即可下载 按照自己电脑系统进行选择,然后填写邮箱和选择行业,第一次登录如果不提交不会下载,下载完成是一个z ...
- 《Hands-On System Programming with Go》之写文件的代码模板
使用了buffer,这个神奇东东. var w io.WriteCloser // initialise writer defer w.Close() b := bufio.NewWriter(w) ...
- sed 使用正则表达式进行替换
echo "111(222)333" | sed 's/(\(.*\))\(.*\)/\2\2\2/' \1 \2 表示匹配的第几个() 在进行模式匹配时,() 需要加转义符号\ ...