Nginx搭建一个简单的代理服务器
nginx的一个常见用途是将其设置为代理服务器,即接收请求、将请求传递给被代理的服务器、从它们那里获取响应并将其发送给客户端的服务器。
我们将配置一个基本的代理服务器,它使用本地目录中的文件提供图像请求,并将所有其他请求发送到被代理的服务器。在这个例子中,两个服务器都将在一个单一的nginx实例上定义。
首先,通过在nginx的配置文件中添加另一个带有以下内容的server块来定义被代理的服务器:
server { listen 8080; root /data/up1; location / { } }
这将是一个简单服务器,监听端口8080(之前,由于使用了标准端口80,所以没有指定listen指令)并将所有请求映射到本地文件系统的/data/up1目录。创建此目录并将index.html文件放入其中。注意,root指令放在了server上下文中。这样的root指令是在为请求提供服务的location块不包括自己的root指令时使用的。
接下来,使用前一节的服务器配置,并修改它以使其成为代理服务器配置。在第一个location块中,放置proxy_pass指令,并在参数中指定被代理服务器的协议、名称和端口(在我们的案例中,它是http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我们将修改第二个location块,该块当前将带有/images/前缀的请求映射到/data/images目录下的文件,以使其匹配具有典型文件扩展名的图像请求。修改后的location块如下所示:
location ~ \.(gif|jpg|png)$ { root /data/images; }
参数是一个正则表达式,匹配所有以.gif、.jpg或.png结尾的URI。正则表达式应以~开头。相应的请求将被映射到/data/images目录。
当nginx选择一个location块来服务请求时,它首先检查指定前缀的location指令,记住最长前缀的位置,然后检查正则表达式。如果有与正则表达式匹配的内容,nginx选择这个位置,否则,它选择之前记住的那个。
代理服务器的最终配置将如下所示:
server { location / { proxy_pass http://localhost:8080/; } location ~ \.(gif|jpg|png)$ { root /data/images; } }
这个服务器将过滤以.gif、.jpg或.png结尾的请求,并将它们映射到/data/images目录(通过将URI添加到root指令的参数),并将所有其他请求传递给上述配置的被代理服务器。
要应用新的配置,请按照前面章节中描述的方式向nginx发送重新加载信号。
还有许多其他指令可用于进一步配置代理连接。