nginx_http配置段(核心模块)
本节是 nginx http 配置的第三部分。上一节我们讲解了 http_core_codule
提供的配置指令,本节我们来讲解 http 的各种功能模块提供的配置指令,内容包括:
- 功能模块
- 访问控制
- 开启状态页
- url重写和自定义日志格式
- 访问日志配置
- 文本压缩
- https 服务配置
- fastcgi 配置
1. 功能模块
1.1 访问控制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
allow IP/Network;
deny IP/Netword;
# 作用: 基于 ip 的访问控制, all 表示所有
# 模块: ngx_http_access_module模块
auth_basic string | off;
# 作用: 基于用户的访问控制
# 模块: ngx_http_auth_basic_module模块
auth_basic_user_file
# 作用: 账号密码文件
# 产生: 建议使用 htppasswd 创建
location /admin/ {
auth_basic "only for adminor";
auth_basic_user_filer /etc/nginx/user/.httppasswd;
}
htpasswd -c -m /path/user/.passwd tom
|
1.2 开启状态页
模块: ngx_http_stub_status_module
模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
location /status {
stub_status on;
allow 172.16.0.0/16;
deny all;
}
stub_status {on|off};
# 作用: 是否开启状态页,用于输出nginx的基本状态信息
# 附注: 仅能用于 location 上下文
# 显示:
# Active connnections: 当前所有处于打开状态的连接数
# server accept handled requests
# n1 n2 n3
# - n1:已经接受的客户端请求的总数;
# - n2:已经处理完成的客户端请求的总数;
# - n3:客户端发来的总的请求数;
# Reading: n Writing: w Waiting: t
# - Reading: 处于读取客户端请求报文首部的连接的连接数;
# - Writing: 处于向客户端发送响应报文过程中的连接数;
# - Waiting: 处于等待客户端发出请求的空闲连接数;
|
1.3 url 重写与自定义日志
模块: ngx_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
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
|
rewrite regex replacement flag;
# 作用: url 重写
# eg: rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
# flag:
# last: 默认
# 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,
# 然后用重写后的规则再从头开始执行 rewriter 检查;
# break:
# 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,
# 而后通过重写后的规则重新发起请求
# 且不会被当前的location 内的任何 rewriter 规则所检查;
# redirect: 以302临时重定向返回新的URL;
# permanent: 以301永久重定向返回新的URL;
# 说明:
# last,break 只会发生在 nginx 内部,不会与客户端交互,客户端收到的是正常的响应
# redict, permanent 则是直接返回 30x 响应,跨站重写必需使用 redirect或permanent
# 如果 last 发生死循环,nginx 会在循环 10 此之后返回 50x 响应
return code [text];
return code URL;
return URL;
# 作用: 停止进程并返回特定的响应给客户端,非标准的 444 将直接关闭链接,且不会发送响应
rewrite_log on | off;
# 作用: 是否开启重写日志;
# 示例
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
location / {
rewriter ^/bbs/(.*)$ /forum/$1 break;
rewriter ^/bbs/(.*)$ https://www.tao.com/$1 redirect; # http --> https
}
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
}
if ($request_method = POST) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
|
1.4 日志配置
模块: ngx_http_log_module
模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
log_format name string ...;
# 作用: string可以使用nginx核心模块及其它模块内嵌的变量;
access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
# 作用: 访问日志文件路径,格式及相关的缓冲的配置;
# buffer=size: 日志缓冲区大小
# flush=time
access_log off;
# 作用: 关闭记录日志功能,
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
# 作用: 缓存各日志文件相关的元数据信息;
# 参数:
# max:缓存的最大文件描述符数量;
# min_uses:在inactive指定的时长内访问大于等于此值方可被当作活动项;
# inactive:非活动时长;
# valid:验正缓存中各缓存项是否为活动项的时间间隔
|
1.5 文本压缩
模块: ngx_http_gzip_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
|
gzip on | off;
# 作用: 是否启用压缩功能
gzip_comp_level level;
# 作用: 设置压缩级别,1-9
gzip_disable regex ...;
# 作用: 对哪些浏览器禁用压缩
# 参数: regex 用于匹配请求报文 "User-Agent" 头信息
gzip_min_length length;
# 作用: 启用压缩功能的响应报文大小阈值;
gzip_buffers number size;
# 作用: 支持实现压缩功能时为其配置的缓冲区数量及每个缓存区的大小;
gzip_proxied off | expired | no-cache | no-store | private |
no_last_modified | no_etag | auth | any ...;
# 作用: nginx作为代理服务器接收到从被代理服务器发送的响应报文后,在何种条件下启用压缩功能的;
# 选项:
# off:对代理的请求不启用
# no-cache, no-store,private:表示从被代理服务器收到的响应报文首部的
# Cache-Control的值为此三者中任何一个,则启用压缩功能;
gzip_types mime-type ...;
# 作用: 压缩过滤器,仅对此处设定的MIME类型的内容启用压缩功能;
gzip on;
gzip_comp_level 6;
gzip_min_length 64;
gzip_proxied any;
gzip_types text/xml text/css application/javascript;
|
2. https 服务配置
模块: ngx_http_ssl_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
|
ssl on | off;
# 作用: 是否 ssl
ssl_certificate file;
# 作用: 当前虚拟主机使用PEM格式的证书文件;
ssl_certificate_key file;
# 作用:当前虚拟主机上与其证书匹配的私钥文件;
ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
# 作用: 支持ssl协议版本,默认为后三个;
ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
# 作用: 是否缓存 sll 会话
# 选项:
# builtin[:size]:使用OpenSSL内建的缓存,此缓存为每worker进程私有;
# [shared:name:size]:在各worker之间使用一个共享的缓存;
# 说明: 如果用户请求被不同的 worker 处理时,私有缓存可能时效,因此应该使用公共缓存
ssl_session_timeout time;
# 作用: 客户端一侧的连接可以复用ssl session cache中缓存 的ssl参数的有效时长;
server {
listen 443 ssl;
server_name www.magedu.com;
root /vhosts/ssl/htdocs;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_cache shared:sslcache:20m; # 1m 空间大约能缓存 4000 个会话
}
|
3. 防盗链
模块: ngx_http_referer_module模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
valid_referers none | blocked | server_names | string ...;
# 作用: 定义referer首部的合法可用值;
# 参数:
# none:请求报文首部没有referer首部;
# blocked:请求报文的referer首部没有值;
# server_names:参数,其可以有值作为主机名或主机名模式;
# arbitrary_string:直接字符串,但可使用*作通配符;
# regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;
$invalid_referer
# 作用: 内置的变量,表示当前请求 referer首部是否不符合 valid_referers 定义的规则
#配置示例:
valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
if($invalid_referer) {
return http://www.magedu.com/invalid.jpg;
}
valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;
|