2012-11-05 112 views
30

这里是我的情况:我将有一个运行nginx的前端服务器,以及运行带有不同rails应用程序的apache +乘客的多个后端服务器。我不想做任何负载平衡。我需要做的是设置nginx根据url来代理连接到特定的服务器。 IE,client.domain.com应该指向xxx100:80,client2.domain.com应该指向xxx101:80等等。nginx反向代理多个后端

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

谢谢。

+0

哎是你能够找到一个解决方案?在我的情况下,我希望同一客户端访问多个这些后端服务器,你能帮我找到一个配置吗? – Vinodborole

回答

31

可以匹配不同的URL与服务器块 那么每个服务器块内,你就会有反向代理服务器设置

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; 
} 

显然进一步增加nginx的设置(如error_pageaccess_log,...)作为在每个server -block

+0

完美。谢谢! –

+2

是否可以根据路径配置每个源服务器进行代理,而不仅仅是传入主机/权限?即'/ system1 /'被代理到'http:// x.x.x.100 /',而'/ system2 /'被代理到'http:// x.x.x.120 /'? –

+1

当然,在这种情况下,你只需将代理指令放在适当的位置块,而不是在主服务器块 – cobaco

14

@ 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.100:80; 
    } 
}