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