0%

nginx配置总结(一)

nginx的一些总结。

location匹配规则

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
events {}

http {
include mime.types;

server {
listen 80;
server_name 127.0.0.1;

root /sites/demo;

## 1
# Prefix match
# location /greet {
# return 200 'Hello from NGINX "/greet" location.';
# }

## 2
# Exact match
# location = /greet {
# return 200 'Hello from NGINX "/greet" location. - EXACT MATCH';
# }

## 3
# REGEX match - case sensitive
# location ~ /greet[0-9] {
# return 200 'Hello from NGINX "/greet" location. - REGEX MATCH';
# }

## 4
# REGEX match - case insensitive
location ~* /greet[0-9] {
return 200 'Hello from NGINX "/greet" location. - REGEX MATCH INSENSITIVE';
}

## 5
# Preferential Prefix match
location ^~ /Greet2 {
return 200 'Hello from NGINX "/greet" location.';
}

}
}

### 一、如果把1的路径改为‘/Greet2’,同时把4打开,发现匹配的是4,即使4的配置在后面。
### 二、如果把4和5打开,会发现先匹配的是5。
### 总结匹配的先后顺序:
### 1. Exact Match = uri
### 2. Preferential Prefix Match ^~ uri
### 3. REGEX Match ~* uri
### 4. Prefix Match uri

rewrite and redirect

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
events {}

http {
include mime.types;

server {
listen 80;
server_name 127.0.0.1;

root /sites/demo;

# 1.
location /logo {
return 307 /thumb.png;
}
### 把/logo的uri重定向到/thumb.png

# 2.
# rewrite ^/user/\w+ /greet;
# location /greet {
# return 200 "Hello user";
# }
### 访问http://127.0.0.1/user/john,实际访问http://127.0.0.1/greet,但是浏览器地址栏的地址不变。


# 3.
# rewrite ^/user/(\w+) /greet/$1;
location = /greet/john {
return 200 "Hello john";
}

### 访问http://127.0.0.1/user/john,实际访问http://127.0.0.1/greet/john,会传递后面的正则。

# 4.
rewrite ^/user/(\w+) /greet/$1 last;
rewrite ^/greet/john /thumb.png;

### 如果后面有一个last,那这个rewrite就是最后一个rewrite规则,虽然后面还有rewrite也不会生效。
}
}

变量

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
events {}

http {
include mime.types;

server {
listen 80;
server_name 127.0.0.1;

root /sites/demo;

location /inspect {
return 200 "$host\n$uri\n$args\n$arg_name";
### 访问:http://127.0.0.1/inspect?name=marlin
### 返回:
### 127.0.0.1
### /inspect
### name=marlin
### marlin
}


# Check static API key
# if ( $arg_apikey != 1234 ) {
# return 401 "Incorrect API Key";
# }

# Check if weekend
set $weekend 'No';
if ( $date_local ~ 'Saturday|Sunday' ) {
set $weekend 'Yes';
}

location /is_weekend {
return 200 $weekend;
}
}
}

try_files

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
vents {}

http {
include mime.types;

server {
listen 80;
server_name 127.0.0.1;

root /sites/demo;


# 1. try_files

try_files $uri /cat.png /greet /friendly_404;

location /friendly_404 {
return 404 "Sorry"
}

location /greet {
return 200 "Hello user";
}

### 访问‘http://127.0.0.1/nothing’
### try_files 会查找第一个变量,发现在‘/sites/demo’目录下没有nothing这个文件或文件夹,继续下一个
,也没有,以此类推,当所有参数都找不到的时候,最后会进行一个内部重定向。所以实际返回‘404 sorry’。


# 2. named_location

try_files $uri /cat.png /greet @friendly_404;

location @friendly_404 {
return 404 "Sorry"
}

### 把‘/’换成‘@’,命名location可以确保最后一个参数一定会被重定向。

}
}

3种指令

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
events {}

######################
# (1) Array Directive
######################
# Can be specified multiple times without overriding a previous setting
# Gets inherited by all child contexts
# Child context can override inheritance by re-declaring directive
access_log /var/log/nginx/access.log;
access_log /var/log/nginx/custom.log.gz custom_format;

http {

# Include statement - non directive
include mime.types;

server {
listen 80;
server_name site1.com;

# Inherits access_log from parent context (1)
}

server {
listen 80;
server_name site2.com;

#########################
# (2) Standard Directive
#########################
# Can only be declared once. A second declaration overrides the first
# Gets inherited by all child contexts
# Child context can override inheritance by re-declaring directive
root /sites/site2;

# Completely overrides inheritance from (1)
access_log off;

location /images {

# Uses root directive inherited from (2)
try_files $uri /stock.png;
}

location /secret {
#######################
# (3) Action Directive
#######################
# Invokes an action such as a rewrite or redirect
# Inheritance does not apply as the request is either stopped (redirect/response) or re-evaluated (rewrite)
return 403 "You do not have permission to view this.";
}
}
}

缓存和超时配置

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
user www-data;

worker_processes auto;

events {
worker_connections 1024;
}

http {

include mime.types;

# Buffer size for POST submissions
client_body_buffer_size 10K;
client_max_body_size 8m;

# Buffer size for Headers
client_header_buffer_size 1k;

# Max time to receive client headers/body
client_body_timeout 12;
client_header_timeout 12;

# Max time to keep a connection open for
keepalive_timeout 15;

# Max time for the client accept/receive a response
send_timeout 10;

# Skip buffering for static files
sendfile on;

# Optimise sendfile packets
tcp_nopush on;

server {

listen 80;
server_name 167.99.93.26;

root /sites/demo;

index index.php index.html;

location / {
try_files $uri $uri/ =404;
}

location ~\.php$ {
# Pass php requests to the php-fpm service (fastcgi)
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}
}
}

headers and expires

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
worker_processes auto;

events {
worker_connections 1024;
}

http {

include mime.types;


server {

listen 80;
server_name localhost;

root /sites/demo;

index index.php index.html;

location / {
try_files $uri $uri/ =404;
}

location ~\.php$ {
# Pass php requests to the php-fpm service (fastcgi)
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
}

location = /thumb.png {

add_header Cache-Control public;
add_header Pragma public;
add_header Vary Accept-Encoding;
expires 60m;
}

### 60分钟的过期时间,文件缓存在客户端。

}
}