2012-11-05 182 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; 
    } 
}