官方文档地址:http://nginx.org/en/docs/beginners_guide.html#static
nginx最常用的一个功能是作为代理服务器。代理服务器接受请求并把请求传递给被代理的多个服务器,获取被代理服务器的相应然后发送给用户。下面将配置一个最基本的代理服务器,响应图片文件请求,并把所有的其他请求转发给被代理服务器服务器。两个服务器都将被定义为一个单独的nginx实例。
- 首先,通过增加server块,定义被代理服务器。如下面配置:
service { listen 8080; root /pathto/data/upl; location / { } }
这样配置一个简单的服务器,监听8080端口(前提是这个端口还没有被listen指令指定监听过),并把所有请求映射到本地文件系统的/pathto/data/upl路径。创建这个文件路径并且放入index.html文件。注意,root指令需要放在server环境下。在对没有自己root指令的请求进行响应,且location块被选中时,location下的root指令才会被使用。
- 使用已经配置好的(http://www.cnblogs.com/Lissssssssss/p/8846719.html)服务,修改将其代理到上面的服务器中:在第一个location块中,添加proxy_pass指令后接协议,服务名,端口号使其作为代理服务。
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /pathto/data; } }
然后修改第二个location块。第二个location原先是通过/images/前缀匹配,映射到本地文件系统的/pathto/data/images/路径下。现在将其修改为通过匹配请求图片的扩展名,将其映射到本地文件系统下。修改如下:
location ~ .(gif|jpg|png)$ { root /pathto/data/images; }
参数是一个正则表达式,匹配所有的以.gif .jpg 或者 .png为结尾的URLs。正则表达式需要~为开头。对应的请求将会被匹配到/pathto/data/images路径下。
当nginx选择一个location去服务一个请求时,它会首先检查确定的前缀,并且是最长前缀优先,然后才会去匹配正则表达式。如果有匹配的正则表达式,nginx选择对应的location,否则,它将会选择之前记住的location。 - 最终的配置如下:
server { location / { proxy_pass http://localhost:8080/; } location ~ .(gif|jpg|png)$ { root /pathto/data/images; } }
这样配置的服务,会过滤以.gif .jpg或者.png为结尾的请求,并且将其映射到/pathto/data/images本地文件系统路径(通过增加root指令的参数到URI上)。然后将其他所有的请求代理到代理服务器上。