详解nginx 代理多个服务器(多个server方式)

  

详解nginx代理多个服务器

在使用nginx进行代理时,我们可能需要将请求分发给多个服务器,这时候就需要使用多个server的方式进行代理。

具体操作流程如下:

  1. 在nginx的配置文件中,定义多个upstream配置块,用于指定不同的代理服务器。例如:

```
upstream server1 {
server 192.168.1.100:8080;
}

upstream server2 {
server 192.168.1.200:8080;
}
```

这里定义了两个代理服务器,一个是192.168.1.100:8080,另一个是192.168.1.200:8080。

  1. 然后,在server配置块中,使用proxy_pass指令将请求分发给相应的upstream配置块。例如:

```
server {
listen 80;
server_name example.com;

   location /server1 {
       proxy_pass http://server1;
   }

   location /server2 {
       proxy_pass http://server2;
   }

}
```

在这个配置中,如果访问example.com/server1,将会被转发到192.168.1.100:8080;如果访问example.com/server2,将会被转发到192.168.1.200:8080。

  1. 最后,需要根据需要配置其他的代理相关参数,例如:

```
server {
listen 80;
server_name example.com;

   location /server1 {
       proxy_pass http://server1;

       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

       proxy_connect_timeout 60s;
       proxy_read_timeout 600s;
       proxy_send_timeout 600s;

       client_max_body_size 10m;
   }

   location /server2 {
       proxy_pass http://server2;

       ...
   }

}
```

示例说明

假设我们有两个代理服务器A和B,它们分别运行在192.168.1.100和192.168.1.200上,端口号均为8080。我们需要使用nginx将请求分发给这两个服务器。

下面是对应的nginx配置示例:

upstream serverA {
    server 192.168.1.100:8080;
}

upstream serverB {
    server 192.168.1.200:8080;
}

server {
    listen 80;
    server_name example.com;

    location /serverA {
        proxy_pass http://serverA;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;

        client_max_body_size 10m;
    }

    location /serverB {
        proxy_pass http://serverB;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;

        client_max_body_size 10m;
    }
}

在这个示例中,服务器A对应的upstream配置块为serverA,服务器B对应的upstream配置块为serverB。在server配置块中,分别配置了两个location块,分别用于将请求分发给serverA和serverB。这里还设置了一些代理相关参数,例如转发请求头(proxy_set_header)和连接超时(proxy_connect_timeout)等。

假设我们需要将请求的URL中的'/api'前缀分发到服务器B上,其余请求分发到服务器A上,那么可以将nginx配置修改如下:

upstream serverA {
    server 192.168.1.100:8080;
}

upstream serverB {
    server 192.168.1.200:8080;
}

server {
    listen 80;
    server_name example.com;

    location /serverA {
        proxy_pass http://serverA;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;

        client_max_body_size 10m;
    }

    location /api {
        proxy_pass http://serverB;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;

        client_max_body_size 10m;
    }

    location / {
        proxy_pass http://serverA;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_connect_timeout 60s;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;

        client_max_body_size 10m;
    }
}

在这个示例中,增加了一个location块,用于将以'/api'为前缀的URL请求分发到serverB上。其余请求仍然分发到serverA上。

相关文章