主要内容
-
nginx服务部署安装
-
nginx目录结构
-
nginx服务的企业应用
-
nginx访问模块
-
网站的LNMP架构部署
-
负载均衡
-
高可用服务
详细笔记
nginx服务部署安装
编译安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
1
2
3
4
5
6
7
8
9
10
11
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
wget http://nginx.org/download/nginx-1.16.0.tar.gz #1
# 2. 解压软件
# 3. 配置操作
./confgure --prefix= --user=USER
# --prefix=PATH,指定安装路径
# --user=USER,设置一个虚拟用户管理worker进程(安全)
# --group=GROUP,设置一个虚拟用户组管理worker进程(安全)
# 4. 进行软件的编译
make
# 5. 编译安装过程
make install
|
yum官方源安装方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
vim /etc/yum.repos.d/nginx.repo #1
[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
# 2. yum安装nginx软件
yum install -y nginx
# 3. 启动nginx
systemctl start nginx
systemctl enable nginx
|
nginx目录结构
/etc/logrotate.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# 1. /etc/logrotate.d,实现nginx日志文件定时切割处理
# 1.1 利用脚本切割
mv /var/log/nginx/access.log /var/log/nginx/access_$(date +%F).log
systemctl restart nginx
# 1.2 利用转悠文件切割程序--logrotate
vim /etc/logrotate.conf
# weekly,定义默认日志切割周期
# rotate 4,定义只保留几个切割后的文件
# create,创建出一个相同的源文件
# dateext,定义角标(扩展名信息)
# compress,是否对切割后的文件进行压缩处理
# include /etc/logrotate.d,加载此目录文件配置文件
cat /etc/logrotated.d/nginx
/var/log/nginx/*.log{
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
|
/etc/nginx,配置文件
/var/log/nginx,日志文件
/usr/bin/nginx,命令文件
/usr/share/nginx/html,站点目录
/etc/nginx/nginx.conf,nginx服务配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/etc/nginx/nginx.conf #主配置文件
# 第一个部分:配置文件主区域配置
user www; 定义worker进程管理的用户
补充说明:
master process 主进程,管理服务是否能够正常运行,boss
worker process 工作进程,处理用户的访问请求,员工
worker_processes 2; 定义有几个worker进程,CPU核数/ 核数的2倍
error_log /var/log/nginx/error.log warn; 定义错误日志路径信息
pid /var/run/nginx.pid; 定义pid文件路径信息
#第二个部分:配置文件事件区域
events {
worker_connections 1024; 一个worker进程可以同时接受1024访问请求
}
#第三个部分:配置http区域
http {
include /etc/nginx/mime.types; 加载一个配置文件
default_type application/octet-stream; 指定默认识别文件类型
log_format oldboy '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"http_user_agent" "$http_x_forwarded_for"'; 定义日志格式
access_log /var/log/nginx/access.log oldboy; 指定日志路径
sendfile on; ???
#tcp_nopush on; ???
keepalive_timeout 65; 超时时间
#gzip on;
include /etc/nginx/conf.d/*.conf; 加载一个配置文件
}
/etc/nginx/nginx.d/default,扩展配置(虚拟主机配置文件)
#第四个部分:server区域信息(配置一个网站www、bbs、blog==一个虚拟主机)
server {
listen 80; 指定监听的端口
server_name localhost; 指定网站域名
location / {
root /user/share/nginx/htm; 定义站点目录位置
index index.html index.htm; 定义首页文件
}
error_page 500 502 503 504 /50x.html;
location=/50x.html {
root /usr/share/nginx/html;
}
}
|
nginx服务的企业应用
利用nginx服务搭建一个网站
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# 1. 利用nginx服务搭建一个网站
# 1.1编写虚拟主机配置文件
vim www.conf
server {
listen 80;
server_name www.oldboy.com;
location /oldboy {
root /user/share/nginx/html;
index oldboy.html;
}
}
# 1.2需要获取开发人员编写的网站代码
# 1.3重启nginx服务
# 两种方法:
systemctl reload nginx
nginx -s reload
# nginx命令参数
# -t,检查测试配置文件语法
# -s,控制服务停止或者重新启动
# 1.4编写DNS信息
# 真实域名:在阿里云上进行DNS解析记录配置
# 模拟域名:在windows主机的hosts文件中进行配置即可
c:\windows\system32\drivers\etc\hosts
# 1.5进行测试访问
http://www.oldboy.com
# 部署搭建网站常见错误:
# 1. 网站服务配置文件编写不正确
# 404错误
# 方法一:修改nginx配置文件---location
# 方法二:在站点目录中创建相应目录或文件数据信息
# 403错误
# 方法一:不要禁止访问
# 方法二:因为没有首页文件
# 2. DNS信息配置不正确
# 3. nginx配置文件修改一定要重启服务
# 站点目录中代码文件信息调整,不需要重启服务
|
利用nginx服务搭建一个多网站(www bbs blog)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# 1. 创建多个虚拟主机配置文件
bbs.conf
server {
listen 80;
server_name bbs.oldboy.com;
location / {
root /html/bbs;
index index.html;
}
}
blog.conf
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.html;
}
}
www.conf
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
}
# 2. 创建站点目录和目录中首页文件
mkdir /html/{www,bbs,blog} -p
for name in {www,bbs,blog}; do echo "10.0.0.7 $name.oldboy.com" > /html/$name/index.html; done
for name in {www,bbs,blog}; do cat /html/$name/index.html; done
# 3. 编写hosts解析文件
10.0.0.7 www.oldboy.com bbs.oldboy.com blog.oldboy.com
# 4. 进行访问测试
# 4.1 利用windows进行浏览器访问测试
# 4.2 利用linux进行命令访问测试,curl www.oldboy.com
|
企业中虚拟主机访问方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# 1. 基于域名的方式进行访问
# 2. 基于地址的方式进行访问:只能指定地址访问 --- 负载均衡+高可用服务
server {
listen 10.0.0.7:80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
}
# ps:服务配置文件中设计到地址修改,必须重启nginx服务,不能平滑重启
# 3. 基于端口的方式进行访问:zabbix服务(apache:80)+web服务(nginx:80)
server {
listen 8080;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
}
|
网站页面访问原理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
1
2
3
4
5
6
7
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 1. 将域名进行解析 www.oldboy.com --- 10.0.0.7
# 2. 建立tcp的连接(四层协议)
# 10.0.0.7 目标端口 80
# 3. 根据应用层http协议发出请求
# 请求报文:hosts:bbs.oldboy.com
# 4. 没有相同域名的server主机,会找满足端口要求的第一个主机
# 显示主机的网站页面
|
nginx访问模块
nginx访问模块:ngx_http_access_module
1
2
3
4
5
6
7
8
|
# 企业中网站的安全访问配置
# 1. 根据用户访问的地址进行控制
# 10.0.0.0/24 www.oldboy.com/AV/ 不能访问
# 172.16.1.0/24 www.oldboy.com/AV/ 可以访问
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# 举例配置:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
# 1.1 编写配置文件
vim www.conf
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
}
location /AV {
deny 10.0.0.0/24;
allow 172.16.1.0/24;
root /html/www;
index index.html;
}
}
# 补充:
# location外面的信息,全局配置信息
# location里面的信息,局部配置信息
|
nginx认证模块:ngx_http_auth_basic_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# 2. 根据用户访问进行认证
# 举例配置:
location / {
auth_basic "closed site"; 开启认证功能
auth_basic_user_file conf/htpasswd; 加载用户密码文
}
# 2.1 编写虚拟主机配置文件
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
index index.html;
auth_basic "oldboy-sz-01";
auth_basic_user_file password/htpasswd;
}
}
# 2.2 创建密码文件
# htpasswd参数说明:
# -c,创建一个密码文件
# -n,显示文件内容
# -b,免交互方式输入用户密码信息
# -m,md5加密算法
# -B,使用bcrypt对密码进行加密
# -C,使用bcrypt algorithm对密码进行加密
# -d,密码加密方式
# -s,加密方式
# -p,不进行加密
# -D,删除指定用户
# 修改密码文件权限
# chmod 600 ./htpasswd
# chown www htpasswd
# 500 Internal Server Error
# 1. 内部程序代码编写有问题
# 2. 程序服务中文件权限不正确
curl www.oldboy.com -u oldboy:123456
|
nginx模块功能:ngx_http_autoindex_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 1. 利用 nginx服务搭建网站文件共享服务器
# 第一个步骤:编写配置文件(www.conf)
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www;
auth_basic "oldboy-sz-01";
auth_basic_user_file password/htpasswd;
autoindex on; 开启nginx站点目录索引功能(类似mirror.aliyun.com)
}
}
# PS: 1. 需要将首页文件进行删除
# 2. mine.types媒体资源类型文件作用
# 文件中有的扩展名信息资源,进行访问时会直接看到数据信息
# 文件中没有的扩展名信息资源,进行访问时会直接下载资源
# 网站页面目录数据,中文出现乱码,如何解决
location / {
root /html/www;
...
charset utf-8; 修改目录结构中出现的中文乱码问题
}
# 2. 利用nginx服务搭配置文件别名功能
# 2.1 编写配置文件
server_name www.oldboy.com old.com;
# 2.2 配置好解析信息(local测试:修改本地的host文件)
# 作用:
# a. 编写网站访问测试
# b. 定位要访问的网站服务器(集群多台服务器时,可以用于定位特定服务器)
|
状态模块:ngx_http_stub_status_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 3. 利用nginx状态模块功能对网站进行监控
# 3.1 编写配置文件
vim state.conf
server {
listen 80;
server_name state.oldboy.com
stub_status;
}
# 3.2 重启nginx服务,并且编写解析文件
systemctl reload nginx
10.0.0.7 state.oldboy.com
# Active connections:激活的连接数信息
# accepts:接收的连接数汇总 TCP
# handled:处理的连接数汇总 TCP
# requests:总计的请求数量 HTTP协议请求
# Reading:nginx服务读取请求报文数量 100人点餐
# Writing:nginx服务响应报文信息数量 100人响应
# Waiting:nginx队列机制,要处理(读取或响应保存进行保存) 监控
|
ngx_http_log_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# 4. nginx日志功能配置
# 访问日志:/var/log/nginx/access.log ngx_http_log_module
log_format main '$remote_addr - $remote_user [$time_local] "$request"'
'$status $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_forwarded_for"'; 定义日志格式
access_log /var/log/nginx/access.log main; 调用日志格式
$remote_addr 显示用户访问源IP地址信息
$remote_user 显示认证用户名信息
[$time_local] 显示访问网站时间
$request 请求报文的请求信息
$status 状态码信息
$body_bytes_sent 响应数据尺寸信息
$http_referer 记录调用网站资源的连接地址信息(推广&防止用户盗链)
$http_user_agent 记录用户使用什么客户端软件进行访问页面的(chrome,firefox,IE,Android,IOS)
$http_x_forwarded_for ???负载均衡
# 错误日志:/var/log/nginx/error.log Core functionality
# error_log /var/log/nginx/error.log warn; 指定错误日志路径以及错误日志记录的级别
# 错误级别:
# debug 调试级别,服务运行的状态信息和错误信息详细显示,信息越多
# info 信息级别,只显示重要的运行信息和错误信息
# notice 通知级别,更加重要的信息进行通知说明
# warn 警告级别,可能出现了一些错误信息,但不影响服务运行
# error 错误级别,服务运行已经出现了错误,需要 进行纠正,推荐选择
# crit 严重级别,必须进行修正调整
# alert 严重警告级别,即警告,而且必须进行错误修改
# emerg 灾难级别,服务已经不能正常运行,信息越少
# PS:日志要做切割
|
ngx_http_core_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# 5. nginx服务location作用
# 模块说明:ngx_http_core_module
# location进行匹配uri
# 错误页面优雅显示
location /oldboy {
root /html/www;
error_page 404 /oldboy.jpg;
}
location /oldgirl {
root /html/www;
error_page 404 /oldgirl.jpg;
}
location详细配置
location = / { 精确匹配,优先级01,最高
}
location / { 默认匹配,优先级04,最低
}
location /documents/ { 按照目录进行匹配,优先级03
}
location ^~ /images/ { 优先匹配、不识别uri信息中符号信息,优先级02
}
location ~* \. (gif|jpg|jpeg) $ { 不区分大小写进行匹配,优先级03
}
|
http_rewrite_module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 6. 利用nginx实现页面跳转功能
# 利用rewrite模块是跳转功能,http_rewrite_module
# rewrite ^/(.*) http://www.oldboy.com/$1 permanent; 重写规则配置
# 跳转方式:
# 永久跳转,permanent,301,会将跳转信息进项缓存
# 临时跳转,redirect,302,不会缓存跳转信息
# 出现无限跳转如何解决:
# 一:利用不同server区块配置打破循环
server {
server_name oldboy.com;
rewrite ^/(.*) http://www.oldboy.com/$1 permanent;
}
# 二:利用if判断实现打破循环
if ($host ~* "^oldboy.com$") {
rewrite ^/(.*) http://www.oldboy.com/$1 permanent;
}
|
网站的LNMP架构部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# 1.1 mysql部署:
# 1.1.1 安装
yum install mariadb-server mariadb -y
# 补充:数据库初始化过程 mysql_install_db
# --basedir=path,指定mysql程序目录
# --datadir=path,指定数据信息保存目录
# --user=mysql,让mysql管理数据目录 700
# 1.1.2 启动
systemctl start mariadb.service
systemctl enable mariadb.service
# 1.1.3 设置密码
mysqladmin -u root password 'oldboy123',设置密码
myssql -u root -poldboy123
# 1.2 PHP部署
# 1.2.1 更新yum源、卸载系统自带的PHP软件
yum remove php-mysql php php-fpm php-common
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
# 1.2.2 安装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
# 1.2.3 编写配置文件
vim /etc/php-fpm.d/www.conf
user=nginx
group=nginx
# PS:保证nginx进程的管理用户和php服务进程的管理用户保持一致
# 1.2.4 启动php服务
systemctl start php-fpm
|
LNMP架构的原理
用户访问网站–>nginx(fastcgi_pass)–FastCGI –>(php-fpm – wrapper) php(php解析器)–> mysql(读取或写入)
实现LNMP之间建立关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 3.1 实现nginx+php建立关系
# 3.1.1 编写nginx文件
location ~\.php$ {
root /www;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params; 变量配置文件
}
# 重启nginx服务
# 3.1.2 编写动态资源文件
vim /html/blog/test_php.php
phpinfo();
?>
# 3.1.3 进行访问测试
blog.oldboy.com/test_php.php
# 3.2 实现php+mysql建立关系
# 3.2.1 编写php代码文件
vim test_mysql.php
$servername="localhost";
$username="root";
$password="oldboy123";
$conn=mysqli_connect($servername,$username,$password);
if ($conn){
echo "mysql successful by root !\n";
}else{
die("conection failed:".mysqli_connect_error());
}
?>
|
部署搭建网站页面(代码上线)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# 4.1 获取代码信息(git),使用开源网站代码
# www网站页面:http://www.dedecms.com
# bbs网站页面:http://www.discuz.net/forum.php
# blog网站页面:https://cn.wordpress.org/
# wecenter网站页面:http://www.wecenter.com/?copyright
# 4.2 将代码解压,将解压后信息放入到站点目录中
tar xf wordpress-5.2.1.tar.gz
mv ..
# 4.3 修改站点目录权限
chown -R www.www blog
# 4.4 进行网站页面初始化操作
# 4.5 对数据库服务进行配置
# 创建数据库:create databases wordpress;
# 检查:show databases;
# 创建数据库管理用户:grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';
# 检查:select user,host from mysql.user
# 4.6 利用网站发布博文
|
上传wordpress主题,报413错误,如何解决?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 1.
# 1.1 修改nginx配置文件
vim blog.conf
server {
client_max_body_size 50m; 指定用户上传数据的大小限制(默认1m)
}
# 1.2 修改php.ini配置文件
upload_max_filesize=50M 使用php接收用户上传的更大的数据(默认2M)
|
如何让LNMP架构和存储服务器建立关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# 2.1 查找图片存储位置
# 2.1.1 根据图片链接地址获取图片存储位置
# 2.1.2 使用命令在站点目录中查找
find /html/blog -type f -mmin -5
inotifywait -mrq /html/blog
# 2.2 使web服务器和存储服务器建立关系
# 检查 存储服务是否正常
# 编写存储服务配置文件
showmount -e 172.16.1.31
/data/bbs 172.16.1.0/24
/data/www 172.16.1.0/24
/data/blog 172.16.1.0/24
mkdir /data/{bbs,blog,www}
# 将web服务器blog存储的数据进行迁移,迁移到存储服务器的映射目录
mv /tmp/2019/ /html/blog/wp-content/uploads/
# 默认存储服务器无法存储数据:
# 管理用户无法存储:root_squash --- nfsnobody
# 不同用户无法存储:no_all_squash
# 解决:
# 第一个历程:修改nfs配置文件,定义映射用户为www
useradd www -u 1002
chown -R www /data
# 第二个历程:使用root用户可以上传数据
sed -ri.bak 's#(sync)#\1,anonuid=1002,anongid=1002#g' /etc/exports
|
如何让LNMP架构和数据库服务器建立关系???
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# 3.1 将web服务器本地数据库数据进行备份
mysqldump -uroot -poldboy123 --all-datebase > /tmp/web_back.sql
# 3.2 将备份数据进行迁移
scp -rp /tmp/web_back.sql 172.16.1.51:/tmp
# 3.3 恢复数据信息
yum install -y mariadb-server mariadb
# 3.4 修改数据库服务器中数据库用户信息
> select user,host from mysql.user;
# 优化:删除无用的用户信息
delete from mysql.user where user="" and host="localhost";
delete from mysql.user where user="" and host="web01";
# 添加:添加新的用户信息
grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';
# 3.5 修改web服务器代码文件信息
vim wp-config.php
define ('DB_HOST','172.16.1.51');
# 3.6 停止web服务器上数据库服务
# 补充:web01代码信息迁移到web02服务器,并且修改了网站域名无法正确访问
# 访问新域名会自动跳转到老的域名
# 方法一:
# 修改wordpress后台设置信息,将后台中老的域名改为新的域名
# 方法二:
# 修改数据库中的一个表,在表中修改一个和域名有管的条目信息
|
负载均衡
负载均衡概念
1
2
3
4
|
# 反向代理:外网-->代理服务器-->公司网站服务器web
# 正向代理:内网-->代理服务器-->互联网-->web服务器(日本),翻墙
|
负载均衡的环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
1
2
3
4
5
6
7
8
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 集群服务器部署:
# PS:集群中每天服务器的配置一模一样
# 企业中:
# 01,现部署好一台LNMP服务器,上传代码信息
# 02,进行访问测试
# 03,批量部署多台web服务器
# 04,将nginx配置文件进行分发
# 05,将站点目录分发给所有主机
|
负载均衡服务器部署:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# 6.1 安装部署nginx软件
# 6.2 编写nginx负载服务配置文件
ngx_http_upstream_module,upstream,负载均衡
ngx_http_proxy_module,proxy_pass,方向代理
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.oldboy.com;
location / {
proxy_pass http://oldboy;
}
}
# 6.3 实现负载功能测试
# 搭建集群测试环境:
for name in www bbs blog; do echo "$name 10.0.0.7" > /html/$name/wenwen.html; done
for name in www bbs blog; do echo "$name 10.0.0.8" > /html/$name/wenwen.html; done
for name in www bbs blog; do echo "$name 10.0.0.9" > /html/$name/wenwen.html; done
# 修改windows解析文件
10.0.0.5 www.oldboy.com blog.oldboy.com bbs.oldboy.com
# 负载均衡访问网站异常排错思路:
# 01,负载均衡 测试后端web节点服务器是否能够正常访问
# 02,负载均衡,利用curl命令访问负载均衡服务器
# 03,打开xshell连接 ping www.oldboy.com
# 04,配置文件编写不正确
|
负载均衡配置模块详细说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
ngx_http_upstream_module,upstream
# 实现不同调度功能
# 01,轮询分配请求(平均)
# 02,权重分配请求(能力越强责任越重)
upstream oldboy {
server 10.0.0.7:80 weight=3;
server 10.0.0.8:80 weight=2;
server 10.0.0.9:80 weight=1;
}
# 03,实现热备份功能(备胎功能)
upstream olbboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80 backup;
}
# 04,定义最大失败次数,健康检查参数
max_fails=5
# 05,定义失败之后重发的间隔时间,健康检查参数
fail_timeout=10s,会给失败的服务器一次机会
# 实现不同调度算法
# 01,rr,轮询调度算法
# 02,wrr,权重调度算法
# 03,ip_hash,出现反复登录的时候,可以配置上,但是这个方法没有配置缓存的方式好
# 04,least_conn,根据服务器连接数分配资源
ngx_http_proxy_module,proxy_pass
# 01,访问不同网站地址,不能显示不同的网站页面
proxy_set_header Host $host; 把真实需求访问的地址发给后端服务器
# 02,访问网站用户地址信息无法进行分析统计
proxy_set_header X-Forwarded-For $remote_addr;
# 03,访问负载均衡会出现错误页面,影响用户体验
proxy_next_upstream error timeout http_404 http_502 http_403;
# 1. 负载均衡企业实践应用
# 1.1 根据用户访问的uri信息进行负载均衡
# 1.2 根据用户访问的终端信息显示不同的页面
|
高可用服务
1
2
3
4
5
6
7
8
9
10
11
12
|
1
2
3
4
5
6
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# 3. 如何实现部署高可用服务
# 利用keepalived软件实现
# 作用:
# 3.1 为LVS服务而诞生出来的 k8s+容器技术docker
# keepalived+LVS负载均衡软件(4层)
# 3.2 实现高可用服务功能
|
高可用keepalived服务部署流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# 4.1 准备高可用服务架构
# 4.2 安装部署keepalived软件(lb01 lb02)
yum install -y keepalived
# 4.3 编写keepalived配置文件
vim /etc/keepalived/keepalived.conf
GLOBAL CONFIGURATION,全局配置部分
VRRPD CONFIGURATION,VRRP协议配置部分
LVS CONFIGURATION,LVS服务管理配置部分
vim /etc/keepalived/keepalived.conf
global_defs { 全局配置部分
notification_email { 设置发送邮件信息
XXX
}
notification_email_from XXX
smtp_server XXX
smtp_connect_timeout 30
router_id lb01 高可用集群主机身份标识(集群中主机身份标识名称不能重复)
}
vrrp_instance oldboy { Vrrp协议家族
state MASTER 标识所有家族中的身份(MASTER/BACKUP)
interface eth0 指定虚拟IP地址出现在什么网卡上
virtual_router_id 51 标识家族身份信息,多台高可用服务配置要一致
priority 100 设定优先级,优先级越高,就越有可能成为主
advert_int 1 ?
authentication { 实现通讯需要有认证过程
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { 配置虚拟IP地址信息
192.168.200.16/24
}
}
# 4.4 启动keppalived服务
# 。。。
# 4.5 修改域名和IP地址解析
# 。。。
|
高可用服务器企业应用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
# 5.1 高可用服务常见异常问题,脑裂问题
# 出现原因,高可用服务器接收不到主服务器发送的组播包,备服务器上会自动生成VIP地址
# 物理原因,高可用集群之间通讯线路出现故障
# 逻辑原因,安全策略阻止
# 如何解决:
# 01,进行监控,并发出告警
# 备服务器出现VIP地址的原因:
# a,主服务器出现故障
# b,出现脑裂问题
# 02,直接关闭一台服务器的keepalived服务
# 5.2 如何实现keepalived服务自动释放vip地址资源
# nginx+keepalived:nginx服务停止,keepalived也必须停止
# 5.2.1 编写监控nginx服务器状态监控
#!/bin/bash
num=`ps -ef | grep -c nginx`
if [ $num -lt 3 ]
then
systemctl stop keepalived
fi
# 5.2.2 测试监控脚本
# 5.2.3 实时监控nginx服务状态---keepalived配置文件
vrrp_script check_web {
script "/server/scripts/check_web.sh" 定义需要监控脚本(脚本是执行权限)
interval 2 执行脚本的间隔时间(秒)
weight 2 ???
}
track_script {
check_web 调用执行你的脚本信息
}
# 5.3 如何设定双主配置
lb01:
vrrp_instance oldboy {
state MASTER
...
virtual_router_id 51
priority 150
...
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance oldgirl {
state BACKUP
...
virtual_router_id 52
priority 100
...
virtual_ipaddress {
10.0.0.4/24
}
}
lb02:
vrrp_instance oldboy {
state BACKUP
...
virtual_router_id 51
priority 100
...
virtual_ipaddress {
10.0.0.3/24
}
}
vrrp_instance oldgirl {
state MASTER
...
virtual_router_id 52
priority 150
...
virtual_ipaddress {
10.0.0.4/24
}
}
# 5.4 高可用服务安全访问配置(负载均衡服务)
# 5.4.1 修改nginx负载均衡文件
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
...
# 5.4.2 修改内核文件
echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
sysctl -p
# 5.4.3 重启nginx负载均衡服务
systemctl restart nginx
|
文章作者
上次更新
2021-06-23