nginx反向代理多个后端

时间:2012-11-05 21:39:55

标签: nginx

以下是我的情况:我将有一个运行nginx的前端服务器,以及运行带有不同rails应用程序的apache + passenger的多个后端服务器。我不是想做任何负载平衡。我需要做的是设置nginx以基于url代理到特定服务器的连接。 IE,client.domain.com应指向x.x.x.100:80,client2.domain.com应指向x.x.x.101:80等。

我对nginx并不熟悉,但我找不到符合我情况的特定在线配置。

感谢。

2 个答案:

答案 0 :(得分:36)

您可以将不同的网址与服务器区匹配 然后在每个服务器块内部,您将拥有反向代理设置

server { 
  server_name client.domain.com;

  # app1 reverse proxy follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://x.x.x.100:80;

}

server { 
  server_name client2.domain.com;

  # app2 reverse proxy settings follow
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://x.x.x.100:80;
}

显然可以根据需要在每个error_page - 块中添加更多nginx设置(例如access_logserver,...)

答案 1 :(得分:23)

@ mohamnag的评论是对的。 proxy_pass仅允许location

请参阅:

http://wiki.nginx.org/HttpProxyModule#proxy_pass

https://www.nginx.com/resources/admin-guide/reverse-proxy/

所以正确的配置是

server { 
    server_name client.domain.com;

    location / {
        # app1 reverse proxy follow
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.100:80;
    }
}

server { 
    server_name client2.domain.com;

    location / {
        # app2 reverse proxy settings follow
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://x.x.x.101:80;
    }
}