[toc]

Nginx多Server优先级

问题描述

在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中的每个server_name进行匹配,以此决定到底由哪一个server来处理这个请求,但nginx如何配置多个相同的server_name,会导致server_name出现优先级访问冲突。

演示实例

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
# 准备nginx对应的配置文件
cat 1.conf 2.conf 3.conf
server{
listen 80;
server_name _;
root /code/1;
index index.html;
}

server{
listen 80;
server_name _;
root /code/2;
index index.html;
c8
}

server{
listen 80;
server_name _;
root /code/3;
index index.html;
}

# 准备站点目录
mkdir /code/{1..3}


# 检查语法提示冲突,忽略并重启
nginx -t
nginx: [warn] conflicting server name "_" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "_" on 0.0.0.0:80, ignored



# 部署代码
echo 1 > /code/1/index.html
echo 2 > /code/2/index.html
echo 3 > /code/3/index.html
1.首先选择所有的字符串完全匹配的server_name。(完全匹配)
2.选择通配符在前面的server_name,如.driverzeng.com blog.driverzeng.com3.选择通配符在后
面的server_name,如driverzeng. driverzeng.com driverzeng.cn
4.最后选择使用正则表达式匹配的server_name
5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default_server]的server块
6.如果没写,那么就找到匹配listen端口的第一个Server块的配置文件
0 ✓ 17:39:51 root@web01,172.16.1.7:/etc/nginx/conf.d # cat 1.conf 2.conf
3.conf
server{
listen 80;
server_name (blog|www).xxx.com;
root /code/1;
index index.html;
}
server{
listen 80;
server_name www.xxx.com;
root /code/2;
index index.html;
}
server{
listen 80;
server_name *.xxx.com;
root /code/3;
index index.html;
}
# 本地域名解析
10.0.0.7 www.xxx.com
首先选择所有的字符串完全匹配的server_name
server{
listen 80;
server_name (blog|www).xxx.com;
root /code/1;
index index.html;
}
server{
listen 80;
server_name *.xxx.com;
root /code/3;
index index.html;
}
1.首先选择所有的字符串完全匹配的server_name。(完全匹配)
2.选择通配符在前面的server_name
3.选择通配符在后面的server_name
4.最后选择使用正则表达式匹配的server_name
5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default_server]的server块
6.如果没写,那么就找到匹配listen端口的第一个Server块的配置文件
server{
listen 80;
server_name _;
root /code/1;
index index.html;
}
server{
listen 80 default_server;
server_name _;
root /code/2;
index index.html;
}
server{
listen 80;
server_name _;
root /code/3;
index index.html;
}

nginx禁止IP访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# IP访问直接跳转至主站点

server{
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.xxx.com$1 redirect;
}

server{
listen 80;
server_name www.xxx.com;
root /code/2;
index index.html;
}

灵活运用include

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include /etc/nginx/stream.d/.*conf

include /etc/nginx/fastcgi_params

include /etc/nginx/proxy_params # 优化参数

# 创建一个生效配置文件的目录
mkdir /etc/nginx/conf.d/online

# 创建一个不生效配置文件目录
mkdir /etc/nginx/conf.d/offline

# 修改nginx主配置文件
vim /etc/nginx/nginx.conf
include /etc/nginx/conf.d/online/*.conf;


nginx优雅展示404界面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# nginx的.conf配置文件在location层添加404指向配置信息
server{
listen 80 default_server;
server_name _;
charset utf-8;
rewrite (.*) http://www.xxx.com$1 redirect;
}

server{
listen 80;
server_name www.xxx.com;

location /{
root /code;
index index.html;
error_page 404 /404.html; ## 添加此行
}
}

# 创建404.html配置文件
vim /code/404.html
<img style='width:50%;height:80%;'src=https://pic.616pic.com/ys_img/00/28/62/hQ2ObS5ZZR.jpg>

隐藏nginx版本

1
2
3
4
# nginx主配置文件添加以下内容
http{
sever_tokens off;
}

nginx调整上传文件的大小

1
2
3
# nginx主配置文件添加以下内容
client_max_body_size size 1M/500M;
http server location