ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LNMP架构搭建------------------魂惊冉冉江南远,烟草愁如许

2021-08-18 12:31:22  阅读:206  来源: 互联网

标签:------------------ LNMP param nginx wordpress 172.16 php 如许 fastcgi


LNMP架构

一、LNMP架构介绍

1.1、简介

# LNMP是一套技术的组合
Linux、Nginx、Mysql、PHP
Linux、Nginx、Mysql、Python
Linux系统Nginx+Mysql+PHP这种网站服务器架构。
1.Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
2.Mysql是一个开源的关系型数据库管理系统
3.PHP是一种在服务器端执行的嵌入HTML文档的脚本语言

1.2、LNMP架构工作方式

首先Nginx服务是不能处理动态请求的,当用户发起HTTP请求,会被Nginx处理,如果是静态资源请求,Nginx则直接响应返回,如果是动态请求,Nginx则通过fasrcgi协议转交给后端的PHP程序处理。

1.静态请求:请求的内容是静态文件就是静态请求
	1)静态文件:文件上传到服务器,永远不会改变的文件就是静态文件
	2)html就是一个标准的静态文件
ps:一般能走缓存的都是静态文件,没有&符合的连接,只有单独的路径的,
2.动态请求:请求的内容是动态的,就是动态请求
	1)不是真是存在服务器上的内容,是通过数据库或者其他服务器拼凑成的数据

# 总结:
# 当用户发起http请求,请求会被Nginx处理,如果是静态资源请求Nginx则直接返回,如果是动态请求Nginx则通过fastcgi协议转交给后端的PHP程序处理。

php有两个配置文件

#php有两个配置文件php-fpm.conf和php.ini
conf相当于nginx的核心模块和事件驱动模块。对php本身的属性的限制。相关联的配置文件在www.conf中

ini相当于nginx的http模块。开始服务时,对工作中的限制

1.3、Nginx与Fast-CGI详细工作流程

1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断是由哪个locatinon完成的
3.判断用户请求的是静态页面,Nginx直接进行处理
4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议
5.fastcgi会将请求交给php-fpm管理进程,php-fpm管理进程接收到后会调用具体的工作进程warrap
6.warrap进程会调用php程序进行解析,如果只是解析代码php直接返回
7.如果又查询数据库操作,则有php连接数据库(用户 密码 IP)发起查询的操作
8.最终数据由'mysql->warrap->php-fpm->fastcgi->nginx->http->user'
发起请求的路径为:'user->http->nginx->fastcgi->php-fpm->warrap->mysql'

1.4、fastcgi_params参数详解

fastcgi_param SCRIPT_FILENAME $document_root/fastcgi_script_name;
#脚本文件请求的路径

fastcgi_param QUERY+STRING $QUERY_STRING; 
#请求的参数;如app=123;

fastcgi_param  REQUEST_METHOD  $request_method;
#请求的动作(GET,POST)

fastcgi_param CONTENT_TYPE $content_type; # 请求头中的Content-Type字段


fastcgi_param CONTENT_LENGTH $content_length; 
# 请求投中的Content-length字段


fastcgi_param SCRIPT_NAME $fastcgi_script_name;
# 脚本名称

fastcgi_param REQUEST_URI $request_uri;
# 请求的地址不带参数

fastcgi_param DOCUMENT_URI $document_uri;
# 与$uri相同

fastcgi_param DOCUMENT_ROOT $document_root;
# 网站的根目录,在server配置中root指令中指定的值

fastcgi_param SERVER_PROTOCOL $server_protocol;
# 请求使用的协议,通常是HTTP/1.0或HTTP/1.1

fastcgi_param GATEWAY_INTERFACE CGI/1.1;
# CGI版本

fastcgi_param SERVER_SOFTWARE nginx/$nginx_server_version;
# nginx版本号,可修改、隐藏

fastcgi_param REMOTE_ADDR $remote_addr;
# 客户端IP

fastcgi_param REMOTE_PORT $remote_port;
# 客户端端口

fastcgi_param SERVER_ADDR $server_addr;
# 服务器ip地址

fastcgi_param SERVER_PORT $server_port;
# 服务器端口

fastcgi_param SERVER_NAME $server_name;
# 服务器名,域名在server配置中指定的server_name

fastcgi_param PATH_INFO $path_info;
# 可自定义变量

# PHP only, required if PHP was built with --enable-force-cgi-redirect
# fastcgi_param  REDIRECT_STATUS    200;

静态数据请求图解

动态数据请求图解

二、部署LNMP架构流程

2.1、安装Nginx

1.使用官方源安装Nginx
# 详见 Nginx 安装方式
2.更改nginx用户
#  sed -i '/^user/c user www;' /etc/nginx/nginx.conf
3.Nginx加入开机自启
#  systemctl enable nginx

2.2、安装PHP

# 可能会存在没有安装包的提示,重新执行该步骤,多执行几次会解决!!!

1.首先确认有无旧版PHP,有则删除卸载
# yum remove php-mysql-5.4 php php-fpm php-common

2.下载7.2版本的PHP
	1)# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

	2)# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

3.安装PHP
# yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mcrypt php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-pecl-memcached php72w-pecl-redis php72w-pecl-mongodb

4.验证安装是否成功和版本号
#  php -v

5.配置php-fpm用户与nginx的运行用户保持一致
#  sed -i '/^user/c user www' /etc/php-fpm.d/www.conf
#  sed -i '/^group/c group www' /etc/php-fpm.d/www.conf
# uoload_max_filesize=200M
# post_max_size=200M

6.启动php-fpm和加入开机自启
#  systemctl start php-fpm
#  systemctl enable php-fpm

2.3、关联nginx与PHP语法

2.3.1、语法

# fastcgi_pass
Syntax:fastcgi_pass address
Context:location,if in location

设置fastcgi服务器的地址,该地址可以指定为域名、ip地址以及端口
# fastcgi_param
Syntax:fastcgi_param parameter value [if_not_empty];

通过fasrcgi_param设置变量,并将设置的变量传递到后端fastcgi服务器
# fastcgi_index name;
Syntax:fastcgi_index name;
Context:http,server,location

设置fasrcgi默认的首页文件,需要结合fasrcgi_param一起设置

2.3.2、配置

server {
	listen 80;
	server_name www.nginx8.com;
	# client_max_body_size 200M;
	location / {
	root /mnt/kaoshi;
	index index.html index.php;
	}
	location ~* \.php$ {
	fastcgi_pass 127.0.0.1:9000;
	#IP地址为php的地址和端口
	#如果要建立远程连接php,需要更改www.conf中的listen监听的地址,内网和外网都可以。还可以设置允许哪些IP被监听'listen_allow_clinet'
	fastcgi_param SCRIPT_FILENAME /mnt/kaoshi/$fastcgi_script_name;
	include fastcgi_params;
	}
}

#fastcgi_pass  
指定php地址和端口

#fastcgi_param SCRIPT_FILENAME /code/kaoshi/$fastcgi_script_name; 
定义地址变量,固定格式,在中间加上你的文件目录地址
# $document_root 
文件路径变量,代表的是root 后的跟的路径,可以将root /mnt/wordpress 设定在server层,不要单独放在locaotion层,方便以后各个locaotion调用

# include $fastcgi_params;
调用系统设置的变量,提供给上边的变量使用,也可以将此文件中的变量拿出来放在location里面

# 增加 client_max_body_size 200M;可以设置nginx最大上传文件大小。一定在location外面设置。

2.3.3、搭建交作业页面

# 思路:
1.上传交作业系统所需代码文件
2.创建目录,该目录迭代授权www统一用户,文件放在该目录下
3.配置该网页server模块,增加nginx上传文件大小限制命令#(clinet_max_body_size 200M;)
4.php.ini配置文件对文件大小限制进行修改:post_max_size;upload_max_filesize;
5.修改php-fpm/www.conf文件的user和group为www统一用户和nginx.conf的统一用户
6.重启nginx和php-fpm后打开网页上传

# 代码在2.3.2的配置中

2.4、搭建mariadb

2.4.1、安装及启动

# 在mysql主机上安装启动
1.安装
#   yum install -y mariadb-server
2.启动
#	systemctl start mariadb
3.添加自启
#	systemctl enable mariadb
4.验证启动
#	ps -ef | grep mariadb

2.4.2、连接mariadb及设置密码

1.连接mariadb
#	mysql
2.查看数据库
#	show databases;
3.设置密码
#	mysqladmin -uroot passwoed '123'
4.使用密码连接数据库
#    mysql -uroot -p123
5.远程连接数据库
mysql -uroot -p -h 172.16.1.51

2.4.3、修改数据库远程连接权限

#	在mysql命令行中执行:
# MariaDB [(none)]> 
GRANT ALL PRIVILEGES ON wordpress.* TO 'root'@'172.16.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# MariaDB [(none)]> 
FLUSH PRIVILEGES;

#  第一行指令内的密码'123456'需要根据自己设定的密码进行修改

grant		#数据库授权命令
all			#所有命令
on			#在...上面
wordpress	 #worepress下面所有的表,库
to			#给...
wp@'172.16.1.%' #数据库用户
indentified	 #设置密码
by			#密码是...
'123'		#密码内容
;			#命令结束字符

2.4.4、测试PHP和mariadb关联

1.在web主机上编写代码放入wordpress目录下
2.输入网址测试
www.nginx8.com/test.php

数据库测试连接代码

<?php
    $servername = "172.16.1.51";
    $username = "root";
    $password = "123";

    // 创建连接
    $conn = mysqli_connect($servername, $username, $password);

    // 检测连接
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "小哥哥,php可以连接MySQL...";
?>

<img style='width:100%;height:100%;' src=https://blog.driverzeng.com/zenglaoshi/php_mysql.png>

2.4.5、数据库建库和用户授权

# 授权用户
grant all on wordpress.* to wp@'172.16.1.51' identified by '123';
# 查看用户
select user,host from mysql.user;

2.5、搭建wordpress博客

2.5.1、wordpress介绍

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。

2.5.2、下载、解压、授权

1.下载
# wordpress官网:https://cn.wordpress.org/download/
# 下载链接:https://cn.wordpress.org/latest-zh_CN.tar.gz
wget https://cn.wordpress.org/latest-zh_CN.tar.gz
2.解压
#   tar -xf latest-zh_CN.tar.gz
3.授权
chown -R www.www wordpress
4.编写脚本放在/etc/nginx/conf.d/wordpress.conf
server {
	listen 80;
	server_name www.papacnb.com;
	fastcgi_param SCRIPT_FILENAME /mnt/wordpress/
	location / {
	root /mnt/wordpress;
	index index.html index.php;
  }
	location ~* \.php$ {	
	fastcgi_pass 127.0.0.1:9000;
	fastcgi_patam SCRIPT_FILENA /mnt/wordpress$fastcgi_script_name;
	include fastrcgi_params;	
  }
}
5.重启nginx
systemctl restart nginx
6.创建数据库
create database wencenter;
6.测试网站
7.填写网站基本信息进入主页
ps:主机名和密码使用默认配置mysql时用的,不能有差别

三、拆分数据库

介绍

3.1、为什么要拆分

1.由于单台服务器与逆行LNMP架构会导致网站访问缓慢,当内存被沾满时,很容易导致系统出现 out of memory从而kill掉Mysql数据库,所以要将web和数据库进行独立部署。
2.数据量变大时,一台数据库不能满足业务量需求,也容易出现单点故障,所以需要多个节点。

3.2、数据库拆分后解决了什么问题

1.环节web网站的压力
2.增强数据库读写性能
3.提供用户访问速度

3.3、环境准备

主机 IP 部署的服务
web01 172.16.1.7 nginx+php
db01 172.16.1.51 mariadb

3.4、数据库拆分步骤

1.下载安装
#  yum install -y mariadb
2.开启mariadb
#  systemctl start mariadb
3.开机自启
#  systemctl enable mariadb
4.设置密码(在mariadb外设置)
#  mysqladmin -uroot password
5.授权用户远程连接
# grant all on wordpress.* to wp@'172.16.1.%' indentified by '123';
6.测试连接
#  mysql -uwp -p -h 172.16.1.51
7.导出旧数据
#  mysqldump -uroot -p -B wordpress > /tmp/wp.sql
8.将数据导入新数据库
  1)[root@db01 ~]#  mysql -uroot -p < /tmp/wp.sql
  #库外导入
  2)MariaDB [wordpress]> source /tmp/wp.sql;
  #库内读取
  3)MariaDB [wordpress]> source /tmp/wp.sql;
   #任意门方式
9.查看数据
# show databases;    查看数据库
# use wordpress;	查看单个数据库表
# show tables;		查看表内数据
10.修改项目中数据库的地址
vim /mnt/wordpress/wp-config.php
11.测试

四、扩展web服务器

4.1、环境准备

主机 IP 部署服务
web01 172.16.1.7 nginx+php
web02 172.16.1.8 nginx+php
web03 172.16.1.9 nginx+php
db01 172.16.1.5 mariadb

4.2、下载安装nginx+php

1.下载安装nginx和php
2.创建统一用户

4.3、推送配置文件和站点代码包

1.推送web01上nginx和php-fpm的配置文件到web02
# scp -rp /etc/nginx/conf.d root@172.16.1.8:/etc/nginx/conf.d/
# scp -rp /etc/php-fpm.d root@172.16.1.8:/etc/php-fpm.d/
2.推送站点代码包到web02上
# scp -rp /mnt/wordpress/ root@172.16.1.8://mnt/wordpress/
3.站点目录授权
chown -R www.www /mnt/wordpress
4.修改本地hosts访问测试

五、搭建文件共享

5.1、环境准备

主机 IP 部署服务
web01 172.16.1.7 nginx+php
web02 172.16.1.8 nginx+php
web03 172.16.1.9 nginx+php
nfs 172.16.1.31 nfs+rpcbind

5.2、搭建NFS服务器

1.安装nfs-server+rpcbind
# yum install -y nfs-server rpcbind
2.创建挂载目录
# mkdir /data/wordpress
3.配置NFS
# vim /etc/export
/data/wordpress 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
4.创建统一用户
groupadd www -g 666
useradd www -u 666 -g 666 -M -s /sbin/nologin/
5.授权目录
# chown -R www.www /data/wordpress
6.启动nfs-server和rpcbind和添加自启
# systemctl start nfs-server rpcbind
# systemctl enable nfs-sercer rocbind

5.3、配置客户端

1.查看挂载点
# showmount -e 172.16.1.31
2.将文件同步到nfs服务端挂载目录中
#  rsync -avz /mnt/wordpress 172.16.1.31:/data/wordpress/
3.挂载
mount -t nfs 172.16.1.31:/data/wordpress

六、Nginx反向代理

6.1、基本概述

什么是代理?

代理是在现实生活中经常遇到,代理理财,代理租房,代理收货等等

如果没有代理

在没有代理模式下,客户端和Nginx服务端,都是客户端直接请求服务端,服务端直接响应客户端。

企业场景

在互联网请求里面,客户端往往无法直接向服务端发起请求,需要用到代理服务,来实现客户端和服务端通信

正向代理和反向代理

1.正向代理
客户端<-->代理-->服务端(内部上网)
2.反向代理
客户端-->代理<-->服务端(公司集群架构中)
# 区别
1.形式上服务的 对象 不一样
2.正向代理的对象是客户端,为客户端服务
3.反向代理的 对象 是服务端,为服务端服务

Nginx代理服务支持的协议

反向代理使用的协议

模块总结

反向代理模式 Nginx配置模块
http、websocket、https ngx_http_proxy_module
fastcgi ngx_http_fastcgi_module
uwsgi ngx_http_uesgi_module
grpc ngx_http_va_module

6.2、环境准备

主机 IP 部署服务
web01 172.16.1.7 nginx+php
web02 172.16.1.2 nginx+php
web03 172.16.1.9 nginx+php
lb01 172.16.1.5 nginx

6.3、负载均衡服务器部署lb01

1.安装nginx
# yum -y install nginx
2.配置nginx
# 修改nginx统一用户
3.创建统一用户
groupadd www -g 666
useradd www -u 666 -g 666 -M -s /sbin/nologin
4.配置IP连接池文件
# web01-03服务都已经搭好了一个网站可以正常访问的前提下

# cat /etc/nginx/conf.d/daili.conf
upstream web {
	server 172.16.1.7;
	server 172.16.1.8;
	server 172.16.1.9;
}
server {
	listen 80;
	server_name www.papacnb.com;
	location  {
	proxy_pass http://web;
	}
}
5.配置本地hosts文件访问
172.16.1.5 www.papacnb.com


ps: 1.需要将windows本地hosts文件所有的地址解析关掉,只留下nginx反向代理的解析
2.所有/etc/nginx/conf.d/目录下的conf结尾的文件需要移走,因为反向解析的是IP地址,web端所有的访问都是以域名的方式进行的,会匹配不到IP地址,自动选择排序第一的conf文件,造成显示是我们不需要的页面

标签:------------------,LNMP,param,nginx,wordpress,172.16,php,如许,fastcgi
来源: https://www.cnblogs.com/haopapa/p/15156239.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有