Nginx的一个常见用途是将其设置为代理服务器,这意味着服务器接收请求,将请求传递给代理服务器,从中检索响应,然后发送给客户端。
我们将配置一个基本的代理服务器,它将为来自本地目录的文件的映像请求提供服务,并将所有其他请求发送到代理服务器。在本例中,两台服务器都将在nginx的单个实例上定义。
首先,通过在nginx的配置文件中添加另一个服务器块来定义代理服务器,如下所示:
服务器{ #监听端口8080 监听8080; #将请求映射到本地目录,如pictures、js等。 root/data/up1; location/{ # } }这将是一个简单的服务器,它侦听端口8080(以前,因为使用了标准端口80,所以没有指定listen指令),并将所有请求映射到本地文件系统上的/data/up1目录。创建这个目录并把index.html的文件放在里面。请注意,root指令位于服务器上下文中。当用于服务请求的位置块不包含自己的根指令时,使用这种根指令。
接下来,使用上一节中的服务器配置,并将其修改为代理服务器配置。在第一个location块中,放置proxy_pass指令以及参数中指定的代理服务器的协议、名称和端口(在我们的示例中是http://localhost:8080):
server { location/{ proxy _ pass http://localhost:8080; } #将带有/images/ string的请求URL映射到/data目录 location/images/{ root/data; } }我们将修改第二个位置块,它当前将带有/images/前缀的请求映射到/data/images目录中的文件,以匹配带有典型文件扩展名的图像请求。修改后的位置块如下:
#使用正则表达式将gif、jpg、png图片映射到/data/images/directory location ~。(GIF | JPG | PNG)$ { root/data/images; }此参数是一个正则表达式,匹配所有以结尾的URIs。gif,。jpg或者。png。正则表达式应该以~开头。的相应请求将被映射到/data/images目录。
当nginx选择一个位置块来服务请求时,它首先检查带有指定前缀的位置指令,记住带有最长前缀的位置,然后检查正则表达式。如果匹配正则表达式,nginx选择这个位置;否则,它选择它以前记得的位置。
代理服务器的最终配置如下:
server { location/{ proxy _ pass http://localhost:8080/; } 位置~。(gif | jpg | png)$ { root/data/images; } }此服务器将过滤以下列结尾的请求。gif,。jpg或者。png,将它们映射到/data/images目录(通过将URIs添加到root指令的参数中),并将所有其他请求传递给上面配置的代理服务器。
要应用新的配置,请如前所述向nginx发送一个reload信号,即nginx -s reload。