2012-05-17 81 views
3

我基本上試圖完成的是讓我的主網站運行一個用Go編寫的CMS。這將位於www.example.com。與PHP應用程序一起部署Go應用程序有哪些選擇?

我也有寫在位於目錄PHP應用程序,如www.example.com/clients/

我怎樣才能成爲使用Apache/PHP同時使用內置轉到服務example.com example.com/clients在網絡服務器?

回答

4

通過mod_proxy在Apache2的,你可以在代理不同的路徑到不同的目的地本地主機或本地網絡中的其他任何地方都可以訪問您的服務器,其中包括(如果您的服務器可以訪問它)。

爲此,您將使用ProxyPassApache2 Docs for ProxyPass,這是非常有用閱讀)如下面的例子:

<VirtualHost *:80> 
    ServerName some.example.host.xyz 

    DocumentRoot /var/www/your-document-root 

    Alias /clients/ /var/www/clients/ 
    ProxyPass /clients/ ! 
    ScriptAlias /something-using-cgi/ /var/www/cgi-stuff/ 
    ProxyPass /something-using-cgi/ ! 

    ProxyPreserveHost On 
    ProxyPass/http://localhost:9876/ 
    ProxyPassReverse/http://localhost:9876/ 
    ProxyPass /elsewhere/ http://elsewhere.example.host.xyz:1234/ 
    ProxyPassReverse /elsewhere/ http://elsewhere.example.host.xyz:1234/ 
</VirtualHost> 

你要確保你設置代理的安全,使得外部用戶也不能使用您的反向代理作爲轉發代理。您可以通過ProxyRequests這樣做,正如Apache2官方文檔中所述。我在服務器上做到這一點的方法是將其放在服務器範圍的配置中(您應該自行驗證這是否足夠安全):

# disables forward proxy 
ProxyRequests Off 
+0

雖然Apache是​​一個很好的例子,但我所知道的每個流行的Web服務器也可以做到這一點。如果你用Apache作爲例子說明了這個概念,我更喜歡。特別是因爲nginx在帖子中也被標記了。 – mvrak

+0

@mvrak:以上是使用Apache。我不明白你的意思。 –

+0

也許是語義,但是你的答案可以被解釋爲Apache特有的東西,而不是大多數Web服務器所具有的特性,其中的一個例子是Apache中的模塊mod_proxy。 – mvrak

4

對於nginx,Andrew Gerrand對此有一個很好的blog post,但是Apache的原理是一樣的。

您希望將Apache設置爲針對Go應用程序進入請求的反向代理。 對於Apache你想看看mod_proxy

+0

這將適用於子域而不是普通目錄。 –

+3

@adamsilver:你現在只是在猜測,還是真的讓你有這種想法?使用''怎麼樣?或者'location/clients/{...};'在nginx上? – Ashe

+1

您可以使用'mod_rewrite'和'mod_proxy'一起執行代理URL過濾,以便您可以將特定路徑或目錄推送到不同的後端目標(例如基於Go的服務器),或者按照需要在Apache中保留路徑的其他部分。 –