Nginx初识及配置
Nginx初识,配置重点.
引言
我一直在工作中使用Nginx,部署了许多平台及应用,支撑服务了很多业务。有时用做静态服务器,有时是后端API网关,有时是混合性,也可以是负载均衡。现整理总结一下,既做梳理梳理,也分享给初学者。
前文
nginx是一个 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由Igor Sysoev编写。我向他致敬。
HTTP及反向代理服务器配置
基本组成(server,location)
Nginx HTTP和反向代理服务器的配置可以很复杂,也可以很简单。但无论怎样,其基本是由server及location来完成。先给个基本格式
1
2
3
4
5
6
7
8
9
10
11
http {
server {
listen 80;
server_name 127.0.0.1 localhost;
location / {
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
}
server 是Http处理的基本单元,做为一个虚拟服务,完成Http 请求拦截处理
location 根据其后的path来识别请求,把请求转发到不同服务上去。
请求处理
nginx 首先决定那个虚拟的server来处理请求。server可以分为大类,每类的filter及处理过程均不同
Name-based
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. 配置
```nginx
server {
listen 80 default_server;
server_name test.org www.test.org;
}
server {
listen 80;
server_name test.net www.test.net;
}
server {
listen 80;
server_name test.com www.test.com;
}
```
2. 请求实例
请求头中的"Host" 为以下内容的均可被捕获,若没有则使default_server。
http://test.org
http://test.net
http://test.com
Name-based 和Ip-based
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. 配置
```nginx
server {
listen 192.168.0.1:80;
server_name test.org www.test.org;
}
server {
listen 192.168.0.1:80;
server_name test.net www.test.net;
}
server {
listen 192.168.1.2:80;
server_name test.com www.test.com;
}
```
2. 请求实例
请求头中的"Host" 为以下内容的均可被捕获,若没有则使用default_server。
http://test.org
http://test.net
http://test.com
http://192.168.1.1:80
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
server {
listen 80;
server_name test.org www.test.org;
...
}
server {
listen 80;
server_name *.test.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
server {
listen 80;
server_name ~^(?<user>.+)\.test\.net$;
...
}
nginx 请求处理步骤
- 截取请求名称
- 通配符名称最长匹配原则进行匹配 例如 “*.test.org”
- 通配符名称最长匹配原则进行匹配 例如 “mail.*”
- 按先后顺序进行正则表达式匹配
负载均衡方式
- 负载均衡方式
- distributed in a round-robin fashion,
- least-connected — next request is assigned to the server with the least number of active connections,
- ip-hash — a hash-function is used to determine what server should be selected for the next request (based on the client’s IP address).
- 相应的配置
默认方式round-robin
1 2 3 4 5 6 7 8 9 10 11 12 13
http { upstream myapp1 { server srv1.test.com; server srv2.test.com; server srv3.test.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
- Least connected 方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
http { upstream myapp1 { least_conn; server srv1.test.com; server srv2.test.com; server srv3.test.com; } server { listen 80; location / { proxy_pass http://myapp1; } } }
权重方式
1 2 3 4 5 6
upstream myapp1 { ip_hash; server srv1.test.com; server srv2.test.com; server srv3.test.com; }
负载
- 基本配置即可
1 2 3 4 5 6 7 8
server { listen 443 ssl; server_name www.test.com; ssl_certificate www.test.com.crt; ssl_certificate_key www.test.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5 }
本文由作者按照 CC BY 4.0 进行授权