原文:http://nginx.org/en/docs/beginners_guide.html
nginx另一个使用的比较多的情况是作为代理服务器,代理服务器接收请求,然后把请求传递到代理服务器,nginx最后会提取代理服务器的回复,并把这些回复发送给客户端。
我们将配置一个基本的代理服务器,图片文件的请求在本地目录中服务,其他的所有请求发送到代理服务器。这个示例中,两个服务都被定义在同一个nginx实例中。
首先,定义用来代理的服务器需要添加一个或者更多个server block到nginx配置文件中,内容如下:
server {
listen 8080;
root /data/up1;
location / {
}
}
这个服务监听8080端口(先前的,listen指令没有指定端口,是因为默认的端口是标注端口80被使用),映射所有的请求到本地文件系统的/data/up1目录。创建/data/up1目录,放进index.html文件。注意:root指令是放在server里的。这个root指令是在匹配到用来服务请求的location block中没有指定自己的root指令时。
接下来,使用先前的配置作为服务配置文件,然后修改它成为一个代理服务器配置。放置proxy_pass指令代表代理协议,proxy_pass的参数代表代理服务器的名字和端口号(这里是,http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我们将修改第二个location block,当前映射的请求使用/images/前缀去比较,然后到/data/images目录下找文件。为了通过典型的文件后缀进行图片请求的匹配,我们这样修改:
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
参数是一个正则表达式,匹配所有以.gif, .jpg, 或者 .png结尾的URI。一个正则表达式应该由~开头。图片请求就会映射到/data/images目录下。
当nginx选择一个location块去服务一个请求,nginx首先检测出location指令所指的前缀,并且会记住匹配到的最长前缀的location,然后检查正则表达式。如果匹配到了一个正则表达式,nginx就使用这个正则表达式所在的location,否则,使用先前记住的那个最长字串的location。
代理服务器的最终配置结果:
server {
location / {
proxy_pass http://localhost:8080/;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
这个服务器将会过滤以.gif, .jpg, or .png 结尾的请求,并映射他们到/data/images目录下,其他所有请求都传送到上面配置的代理服务器进行处理。
关于代理链接的更多配置可以查看这里
http://nginx.org/en/docs/http/ngx_http_proxy_module.html