详解nginx 代理多个服务器(多个server方式)
详解nginx代理多个服务器
在使用nginx进行代理时,我们可能需要将请求分发给多个服务器,这时候就需要使用多个server的方式进行代理。
具体操作流程如下:
- 在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。
- 然后,在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。
- 最后,需要根据需要配置其他的代理相关参数,例如:
```
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上。