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