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发送重新加载信号。


还有许多其他指令可用于进一步配置代理连接。