2009-10-02 28 views
0

我有一個依賴大量後端服務的Web應用程序,我希望能夠在這些服務的不同實例之間動態切換。所以我們的想法是創建一箇中間應用程序,它監聽某些端口並根據需要重定向流量。使用哪種方法來設置動態端口映射器

如果我正在處理純HTTP,我會考慮使用Apache和proxy_pass來完成此操作,這將是理想的(快速,無需停機時可重新配置),但它不僅僅是HTTP流量,這就是爲什麼我卡住了

任何在正確的方向輕推將不勝感激。

感謝,

羅布

回答

1

你爲什麼不使用的軟件(例如Vyatta的,pfSense等)或硬件路由器,並把一些NAT規則的地方?

一個漂亮整潔的開源應用程序我有時使用,當我需要快速轉發一些端口等做一些測試TcpTunnel:http://www.vakuumverpackt.de/tcptunnel/

+0

正如我剛纔提到的,您可以使用像Vyatta這樣的免費軟件路由器並在虛擬機上運行它,這不會花費任何東西,需要一個小時才能建立。 另外,你可以很容易地腳本TcpTunnel改變端口轉發等。 – TJF 2009-10-02 16:38:31

1

你可以只配置Apache,動態地聽上一幫端口(似乎有一個上限,我的系統上大約100),然後使用mod_rewrite動態地映射到您的內容的端口。您也可以使用Perl中寫出的動態主機,但是您還需要包含所有其他配置,這些配置對於每個實例都是相同的。

# Use Perl to write out many Listen directives 
LoadModule perl_module libexec/apache2/mod_perl.so 

<Perl> 

    # The Dynamic Ports are those from 49152 through 65535 
    # On the machines I tested 100 seems to be the upper limit 
    # Apache 2 seems to have issues starting (memory?) when the number 
    # is too high. Once the server has started, there does not seem 
    # to be a performance hit for having a large number of ports open 

    # Starting at 50000 for cleanliness 
    my $lower_port = 50000; 
    my $max_ports_to_use = 100; 


    my $upper_port = $lower_port + $max_ports_to_use; 

    foreach my $port ($lower_port .. $upper_port) { 

    # Listen on a specific port number 
    push @Listen, $port; 

    }; 

</Perl> 


# if we are in the range of dynamic ports 
RewriteEngine on 
RewriteCond %{SERVER_PORT} >49152 
RewriteCond %{SERVER_PORT} <65535 
    # serve up content on that port number 
    RewriteRule (.*) /dynamic_sites/%{SERVER_PORT}/$1