nginx转发的配置文件一般有两种用途,一种是转发url,一种是转发端口。差异并不是很大,我们一起来说明。
首先看一个常见的配置:
server {
default_type 'text/html';
charset utf-8;
listen 80;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
server_name www.mydomin.com
;
access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;
#error_page 404 /404.html;
location ~ \.(cfg|jpg) {
root /ftpfile/gameCfg/;
add_header Content-Disposition "attachment";
}
location / {
root /ftpfile/gameCfg/;
add_header Access-Control-Allow-Origin *;
}
}
-
autoindex(on/off)
是否使用自动目录列表
一般当我们的目录用于显示和下载文件时采用autoindex on;
如:
如果不显示,就autoindex off;
-
autoindex_exact_size(on/off)
指定生成的自动目录文件大小,可以精确到bytes,KB,MB,GB
默认on -
autoindex_localtime(on/off)
是否在列表目录文件上显示本地实践 -
default_type ‘text/html’;
默认文件的显示方式,如果开启这个,我们点击一个文件就是读取文件,不会下载,但是如果我们显示设置了下载,这个就被忽略。 -
location
location是我们配置识别url的规则,重中之重!
-
语法规则
location [=||*|^~] /uri/ {… } -
匹配规则
如上面我们的例子,我们一共写了两个 location配置,第一个是一个正则匹配,不区分大小写,只要后缀是/.cfg或者/.png的都可以匹配,第二个是后缀为/均匹配。这样我们在浏览器输入一个地址,那么就会根据这些匹配规则从上到下匹配,优先使用第一个成功匹配的匹配。
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
location ~* \.png$ {
#规则E
}
location !~ \.html$ {
#规则F
}
location !~* \.html$ {
#规则G
}
location / {
#规则H
}
那么产生的效果如下:
-
访问根目录/,比如http://localhost/将匹配规则A
-
访问 http://localhost/login 将匹配规则B,http://localhost/register则匹配规则H
-
访问 http://localhost/static/a.html 将匹配规则C
-
访问 http://localhost/a.gif,http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而http://localhost/static/c.png则优先匹配到规则C
-
访问 http://localhost/a.PNG 则匹配规则E,而不会匹配规则D,因为规则E不区分大小写。
-
访问 http://localhost/a.html 不会匹配规则F和规则G,http://localhost/a.HTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
-
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,进行处理。
-
add_header Content-Disposition “attachment”;
如果访问到此目录的文件的目的是下载,则在location下面加上此条。 -
本例中我们是转发到目录 /root/ftpfile/gameCfg/
同样我们可以转发到端口
proxy_pass http://127.0.0.1:8080;