server里的配置信息
先来看看server里涉及有哪些内容:
server { listen 80; server_name localhost; autoindex on; #charset koi8-r; #access_log logs/host.access.log main; location /item/ { # root D:\work; proxy_pass http://baike.baidu.com/; # root html; # index index.html index.htm index.jsp; } } |
主要介绍server里的相关参数
Listen:这个参数用来设置从哪个端口来接收请求。可以单配ip地址、单配端口,或者是地址与接口一起配置。所以可以有以下几种配法。
listen 127.0.0.1:8000; listen 127.0.0.1;//没配置端口的话,默认为80端口。 listen 8000; listen localhost:8000; |
另外可以在listen上配置参数default_server,表示为默认的处理服务器。例如:
listen 8000 default_server;
如果没有配置的话,系统默认第一个server作为默认来处理。
Server_name:用来设置虚拟服务器。是nginx用来选择处理请求的服务器。
例如:
server { server_name example.com *.example.com www.example.*; } |
这里的*号通配符一般(注意这里说的是一般情况,也有例外的)要放在开头与结尾。
也可以使用正则表达式,但要以~开头。例如:
server { server_name www.example.com ~^www\d+\.example\.com$; } |
这里如果有多个虚拟服务器,那么在找寻服务器的时候,匹配的优先级是这样:
1、 精确匹配
2、 通配符*开头的匹配
3、 通配符*结尾的匹配
4、 第一个匹配到的正则表达式。
Root:为请求添加root目录。
Root放置的位置可以为http、server、location里。不同位置的影响范围不同。http里影响最大,location里影响最小。
例如:
location /i/ { root /data/w3; } |
如果请求为“/i/top.gif”,那么最后的文件路径为/data/w3/i/top.gif 。即root目录加到匹配目录之前,类似于添加根目录。
如果是放在server里,则在每个匹配的请求前都会加上root这个根目录。一般根据需求来配置根目录。
Location:直接理解为地址。官方提供的文档里,它的后面可以接以下形式的配置:
location [ = | ~ | ~* | ^~ ] uri {... }
location = / { [configuration A ] } location / { [configuration B ] } location /documents/ { [configuration C ] } location ^~ /images/ { [configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [configuration E ] } |
这里对每个符号进行下解释。
=用来表示如果这个等号后面的精确路径匹配到了,那么就结束寻找其他匹配。
这个可以用在高概率匹配到的路径上,节省了后面的查找时间。
^~这个符号表示不会进行正则表达式的匹配
~表示后面是一个正则表达式。
上面的5个路径匹配中,”/”匹配A,”/index.html”匹配B,”documents/document.html”匹配C。”/images/1.gif”匹配D。”/documents/1,jps”匹配E.
另外,如果在location后少写了/符号,请求将会被重定向。
一般有这样写法,
location /user/ { proxy_pass http://user.example.com; } location = /user { proxy_pass http://login.example.com; } |
这里再看看官方对proxy_pass的定义。
Proxy_pass需要协议和代理服务器地址,以及一个可选的uri.例如:
proxy_pass http://localhost:8000/uri/;
这里就涉及到了可选uri的问题。
若有uri,则当请求过来时,与location中匹配的目录地址将被proxy_pass中的uri替代。
例如:
location /name/ { proxy_pass http://127.0.0.1/remote/; } |
若请求是”/name/index.html”,则会变成http://127.0.0.1/remote/index.html.
若没有uri,则当请求过来时,请求的URL将直接透传过来。
例如:
location /some/path/ { proxy_pass http://127.0.0.1; } |
若请求是”/some/path/index.html”,则uri透传过来后将是http://127.0.0.1/some/path/index.html.
另外有一个比较好用的参数alias.
Alias:别名,可以理解为定义一个别名目录,用来替换location中用来匹配的目录地址。
location /i/ { alias /data/w3/images/; } |
当请求为”/i/top.gif”时,将会被替代为”/data/w3/images/top.gif”。