Nginx 的初步认识及配置
课程目标
- Nginx 在分布式架构中的应用分析
- 常用的 Web 服务器及差异
- Nginx 的安装以及配置分析
- Nginx 虚拟主机配置
- 详解 Location 的匹配规则
背景
早期用 F5 做负载均衡
后来通过 负载均衡和热备来提高整个的 QPS。
什么是 Nginx
Nginx 是一个高性能的反向代理服务器
- 正向代理代理的是客户端
- 反向代理代理的是服务端
Apache、Tomcat、Nginx
都是 HTTP 服务器,他们都会放到我们服务端的服务器上,通过绑定 IP 和 端口的方式,去监听一个端口号。接收客户端的 HTTP 请求。
展示给用户端。
JSP 是动态资源。
apache、nginx 动态文件服务器 Tomcat 静态文件服务器
静态web服务器
jsp / servlet 服务器 tomcat
apache 有一些性能瓶颈的。
Nginx 主要是用来处理高并发的请求。
Nginx 和 Apache 也是可以做动态解析的,但是它本身不是做这个的。
Nginx 功能
- 反向代理。
- 流量分发
- 动静分离
- 认证
- 授权
它还是一个高度模块化的设计
安装 Nginx
c[root@Darian1 software]# mkdir nginx [root@Darian1 software]# cd nginx-1.1.4/ [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. [root@Darian1 nginx-1.1.4]# yum install pcre-devel [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx ./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option. [root@Darian3 nginx-1.4.1]# yum install -y zlib-devel [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx [root@Darian1 nginx-1.1.4]# make && make install [root@Darian1 software]# cd nginx [root@Darian1 nginx]# ll 总用量 4 drwxr-xr-x. 2 root root 4096 1月 17 13:58 conf drwxr-xr-x. 2 root root 68 1月 17 13:58 html drwxr-xr-x. 2 root root 6 1月 17 13:58 logs drwxr-xr-x. 2 root root 36 1月 17 13:59 sbin [root@Darian1 nginx]# cd sbin/ [root@Darian1 sbin]# ll 总用量 1704 -rwxr-xr-x. 1 root root 868424 1月 17 13:59 nginx -rwxr-xr-x. 1 root root 868424 1月 17 13:58 nginx.old [root@Darian1 sbin]# ./nginx [root@Darian1 sbin]# ./nginx -s stop
[root@Darian1 software]# mkdir nginx [root@Darian1 software]# cd nginx-1.1.4/ [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. [root@Darian1 nginx-1.1.4]# yum install pcre-devel [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx ./configure: error: the HTTP gzip module requires the zlib library. You can either disable the module by using --without-http_gzip_module option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option. [root@Darian3 nginx-1.4.1]# yum install -y zlib-devel [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx [root@Darian1 nginx-1.1.4]# make && make install [root@Darian1 software]# cd nginx [root@Darian1 nginx]# ll 总用量 4 drwxr-xr-x. 2 root root 4096 1月 17 13:58 conf drwxr-xr-x. 2 root root 68 1月 17 13:58 html drwxr-xr-x. 2 root root 6 1月 17 13:58 logs drwxr-xr-x. 2 root root 36 1月 17 13:59 sbin [root@Darian1 nginx]# cd sbin/ [root@Darian1 sbin]# ll 总用量 1704 -rwxr-xr-x. 1 root root 868424 1月 17 13:59 nginx -rwxr-xr-x. 1 root root 868424 1月 17 13:58 nginx.old [root@Darian1 sbin]# ./nginx [root@Darian1 sbin]# ./nginx -s stop
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
- 下载 tar 包
tar -zxvf nginx.tar.gz
./configure [--prefix]
make && make install
启动和停止
./nginx
./nginx -s stop
nginx.conf
[root@Darian1 nginx]# cd conf/
[root@Darian1 conf]# ll
总用量 60
-rw-r--r--. 1 root root 979 1月 17 13:58 fastcgi.conf
-rw-r--r--. 1 root root 979 1月 17 13:59 fastcgi.conf.default
-rw-r--r--. 1 root root 909 1月 17 13:58 fastcgi_params
-rw-r--r--. 1 root root 909 1月 17 13:59 fastcgi_params.default
-rw-r--r--. 1 root root 2837 1月 17 13:59 koi-utf
-rw-r--r--. 1 root root 2223 1月 17 13:59 koi-win
-rw-r--r--. 1 root root 3268 1月 17 13:58 mime.types
-rw-r--r--. 1 root root 3268 1月 17 13:59 mime.types.default
-rw-r--r--. 1 root root 2685 1月 17 13:58 nginx.conf
-rw-r--r--. 1 root root 2685 1月 17 13:59 nginx.conf.default
-rw-r--r--. 1 root root 544 1月 17 13:58 scgi_params
-rw-r--r--. 1 root root 544 1月 17 13:59 scgi_params.default
-rw-r--r--. 1 root root 570 1月 17 13:58 uwsgi_params
-rw-r--r--. 1 root root 570 1月 17 13:59 uwsgi_params.default
-rw-r--r--. 1 root root 3610 1月 17 13:59 win-utf
[root@Darian1 conf]# vim nginx.conf
[root@Darian1 nginx]# cd conf/
[root@Darian1 conf]# ll
总用量 60
-rw-r--r--. 1 root root 979 1月 17 13:58 fastcgi.conf
-rw-r--r--. 1 root root 979 1月 17 13:59 fastcgi.conf.default
-rw-r--r--. 1 root root 909 1月 17 13:58 fastcgi_params
-rw-r--r--. 1 root root 909 1月 17 13:59 fastcgi_params.default
-rw-r--r--. 1 root root 2837 1月 17 13:59 koi-utf
-rw-r--r--. 1 root root 2223 1月 17 13:59 koi-win
-rw-r--r--. 1 root root 3268 1月 17 13:58 mime.types
-rw-r--r--. 1 root root 3268 1月 17 13:59 mime.types.default
-rw-r--r--. 1 root root 2685 1月 17 13:58 nginx.conf
-rw-r--r--. 1 root root 2685 1月 17 13:59 nginx.conf.default
-rw-r--r--. 1 root root 544 1月 17 13:58 scgi_params
-rw-r--r--. 1 root root 544 1月 17 13:59 scgi_params.default
-rw-r--r--. 1 root root 570 1月 17 13:58 uwsgi_params
-rw-r--r--. 1 root root 570 1月 17 13:59 uwsgi_params.default
-rw-r--r--. 1 root root 3610 1月 17 13:59 win-utf
[root@Darian1 conf]# vim nginx.conf
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 允许链接的最大数量
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
# 允许链接的最大数量
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
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
Main
event
http
虚拟主机配置
针对不同的端口号做不同的访问,不同域名做不同的访问。
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
}
2
3
4
5
6
7
8
9
10
基于ip的虚拟主机
不演示
基于端口号的虚拟主机
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html;
}
}
server {
listen 8080;
server_name localhost;
location / {
root html;
index index.html;
}
}
2
3
4
5
6
7
8
我们可以配置一个端口段,去做不同的路由转发。
基于域名的虚拟主机
购买主域名以后,可以基于主域名开放很多二级域名的。
www.darian.com / ask.darian.com / git.darian.com / bbs.darian.com
server{
listen 8080;
server_name localhost;
location / {
root html;
index index.html;
}
}
server{
listen 80;
server_name bbs.darian.com;
location / {
root html;
index bbs.html;
}
}
server{
listen 80;
server_name ask.darian.com;
location / {
root html;
index ask.html;
}
}
server{
listen 80;
server_name www.darian.com;
location / {
# 去这个目录下边找
root html;
index index.html;
}
}
server{
listen 8080;
server_name localhost;
location / {
root html;
index index.html;
}
}
server{
listen 80;
server_name bbs.darian.com;
location / {
root html;
index bbs.html;
}
}
server{
listen 80;
server_name ask.darian.com;
location / {
root html;
index ask.html;
}
}
server{
listen 80;
server_name www.darian.com;
location / {
# 去这个目录下边找
root html;
index index.html;
}
}
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
[root@Darian1 nginx]# ./sbin/nginx
[root@Darian1 nginx]# ./sbin/nginx -s reload
[root@Darian1 nginx]# ps -ef|grep nginx
root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 9596 9595 0 15:16 ? 00:00:00 nginx: worker process
root 9619 9550 0 15:28 pts/2 00:00:00 grep --color=auto nginx
[root@Darian1 nginx]# ./sbin/nginx
[root@Darian1 nginx]# ./sbin/nginx -s reload
[root@Darian1 nginx]# ps -ef|grep nginx
root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx
nobody 9596 9595 0 15:16 ? 00:00:00 nginx: worker process
root 9619 9550 0 15:28 pts/2 00:00:00 grep --color=auto nginx
2
3
4
5
6
需要去 html 目录下创建几个文件
[root@Darian1 html]# ll
总用量 24
-rw-r--r--. 1 root root 383 1月 17 13:58 50x.html
-rw-r--r--. 1 root root 26 1月 17 16:13 ask.html
-rw-r--r--. 1 root root 25 1月 17 16:14 bbs.html
-rw-r--r--. 1 root root 151 1月 17 13:58 index.html
-rw-r--r--. 1 root root 7133 1月 17 13:58 ngx_core_module.html
[root@Darian1 html]# ll
总用量 24
-rw-r--r--. 1 root root 383 1月 17 13:58 50x.html
-rw-r--r--. 1 root root 26 1月 17 16:13 ask.html
-rw-r--r--. 1 root root 25 1月 17 16:14 bbs.html
-rw-r--r--. 1 root root 151 1月 17 13:58 index.html
-rw-r--r--. 1 root root 7133 1月 17 13:58 ngx_core_module.html
2
3
4
5
6
7
可能需要刷新 DNS
用本地 host 实现了域名的解析。
二级域名随意创造,备案主域名就好了
建议
将配置单独抽出来,放到一个地方去统一的进行管理。
代理解决的事情
- 负载均衡
- 缓存
- 限流
- 内外网的隔离,做安全性的东西
location
nginx 里边,需要知道 location
,对 location
做一些请求的转发。
根据请求的 URI 匹配到对应的 location
以后,去做对应的转发。
配置语法
location [= | ~* | ^~ ] /uri/ {...}
location [= | ~* | ^~ ] /uri/ {...}
配置规则
location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri
location / 通用匹配
location = /uri 精准匹配
location ^~ /uri 前缀匹配
location ~ /uri
location / 通用匹配
2
3
4
规则的优先级
1 location = /
2 location = /index
3 location ^~ /article/
4 location ^~ /article/files/
5 location ~ \.(gif|png|js|css)$
6 location /
http://192.168.11.154/ -> 1
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/darian.png ->5
1 location = /
2 location = /index
3 location ^~ /article/
4 location ^~ /article/files/
5 location ~ \.(gif|png|js|css)$
6 location /
http://192.168.11.154/ -> 1
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/darian.png ->5
2
3
4
5
6
7
8
9
10
11
(静态资源服务器,可以做压缩的)
匹配规则是不能重复的。
- 精准匹配是优先级最高
- 普通匹配(最长的匹配)
- 正则匹配
实际使用建议
# 根目录的配置规则,首页是静态页面
location =/ {
}
# 通用匹配 http://192.168.40.128:8080/index.html
location / {
}
# 静态规则,做动静分离
location ~* \.(gif|....)${
}
# 根目录的配置规则,首页是静态页面
location =/ {
}
# 通用匹配 http://192.168.40.128:8080/index.html
location / {
}
# 静态规则,做动静分离
location ~* \.(gif|....)${
}
2
3
4
5
6
7
8
9
Nginx模块
Nginx 内部都是由一些核心和非核心的第三方模块组成的。它的模块化,我们可以做一些动态的集成和扩展。
除了它本身的功能以外,我们还可以利用第三方的配置去实现更复杂的功能。
默认的:
- 反向代理
- nginx core
模块分类
- 核心模块 ngx_http_core_module
- 标准模块 http模块
- 第三方模块
可以把 模块看成插件
ngx_http_core_module
server{
listen port
server_name ...
localtion{
root ...
}
}
server{
listen port
server_name ...
localtion{
root ...
}
}
2
3
4
5
6
7
Location 实现 URI 到文件系统路径的映射
error_page
c# redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
# redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; }
1
2
3
4
5
6
ngx_http_access_module
实现基于 IP 的访问控制功能
allow address | CIDR | unix: | all;
deny address | CIDR | unix: | all;
自上而下检查,一旦匹配,将生效,条件严格的置前
可以用 -t
来看语法有没有问题
[root@Darian1 sbin]# ./nginx -t
[root@Darian1 sbin]# ./nginx -t
如何添加第三方模块
Nginx 不支持动态去安装或者加载模块。安装别的代码的时候需要重新编译。(我们很少去编写模块)
- 原来所安装的配置,你必在重新安装新模块的时候,加上
- 不能直接
make install
configure --prefix=/data/program/nginx
configure --prefix=/data/program/nginx
安装方法
./configure --prefix=/安装目录 --add-module = /第三方模块的目录
./configure --prefix=/data/program/nginx --with-http_stub_status_module --with-http_random_index_module
cp objs/nginx $nginx_home/sbin/nginx
./configure --prefix=/安装目录 --add-module = /第三方模块的目录
./configure --prefix=/data/program/nginx --with-http_stub_status_module --with-http_random_index_module
cp objs/nginx $nginx_home/sbin/nginx
2
3
c[root@Darian1 nginx-1.1.4]# cd ../nginx-1.1.4/ [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx nobody 9755 9595 0 16:25 ? 00:00:00 nginx: worker process root 13696 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx [root@Darian1 nginx-1.1.4]# kill -9 9595 [root@Darian1 nginx-1.1.4]# kill -9 9755 [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx root 13699 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx cp:是否覆盖"../nginx/sbin/nginx"? y [root@Darian1 nginx-1.1.4]#
[root@Darian1 nginx-1.1.4]# cd ../nginx-1.1.4/ [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx root 9595 1 0 15:16 ? 00:00:00 nginx: master process ./sbin/nginx nobody 9755 9595 0 16:25 ? 00:00:00 nginx: worker process root 13696 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx [root@Darian1 nginx-1.1.4]# kill -9 9595 [root@Darian1 nginx-1.1.4]# kill -9 9755 [root@Darian1 nginx-1.1.4]# ps -ef|grep nginx root 13699 9550 0 19:35 pts/2 00:00:00 grep --color=auto nginx [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx cp:是否覆盖"../nginx/sbin/nginx"? y [root@Darian1 nginx-1.1.4]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16如果直接
make && make install
会直接就没了。所以 替换。
c[root@Darian1 nginx-1.1.4]# kill -9 13713 [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module [root@Darian1 nginx-1.1.4]# make [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx cp:是否覆盖"../nginx/sbin/nginx"? y
[root@Darian1 nginx-1.1.4]# kill -9 13713 [root@Darian1 nginx-1.1.4]# ./configure --prefix=/software/nginx --with-http_stub_status_module --with-http_random_index_module [root@Darian1 nginx-1.1.4]# make [root@Darian1 nginx-1.1.4]# cp objs/nginx ../nginx/sbin/nginx cp:是否覆盖"../nginx/sbin/nginx"? y
1
2
3
4
5
http_stub_status_module
location /status{
stub_status on;
}
location /status{
stub_status on;
}
2
3
- Active connections:当前状态,活动状态的连接数
- accepts:统计总值,已经接受的客户端请求的总数
- handled:统计总值,已经处理完成的客户端请求的总数
- requests:统计总值,客户端发来的总的请求数
- Reading:当前状态,正在读取客户端请求报文首部的连接的连接数
- Writing:当前状态,正在向客户端发送响应报文过程中的连接数
- Waiting:当前状态,正在等待客户端发出请求的空闲连接数
http_random_index_module
www.darian.com
随机显示主页
一般情况下,一个站点默认首页都是定义好的 index.html
、 index.shtml
等等,如果想站点下有很多页面想随机展示给用户浏览,那得程序上实现,很麻烦,使用 nginx
的 random index
即可简单实现这个功能,凡是以/结尾的请求,都会随机展示当前目录下的文件作为首页
添加
random_index on
配置,默认是关闭的clocation / { root html; random_index on; index index.html index.htm; }
location / { root html; random_index on; index index.html index.htm; }
1
2
3
4
5在 html 目录下创建多个 html 页面
他就会多个 HTML 页面随机的展示在首页。
( 官方的模块,你可以直接通过 with model 去集成,如果是下载第三方插件可以通过 http model 去集成。 )