2014-12-01 63 views
0

我試圖託管通過Nginx代理的多個Node JS服務器,它正常工作。一臺服務器託管在'/'上,另一臺服務器託管在例如'/ one'上。下面是相關的Nginx配置。使用Nginx和多個NodeJS應用程序維護結構

upstream host_com { 
    server 127.0.0.1:3000; 
    keepalive 8; 
} 
upstream one_host_com { 
    server 127.0.0.1:3010; 
    keepalive 8; 
} 
server { 
    listen 80; 
    access_log /var/log/nginx/host.log; 
    location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_pass http://host_com/; 
    proxy_redirect off; 
    } 
    location /one { 
    rewrite ^(/one)+/(.*)$ /$2 break; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $proxy_host; #$http_host; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_pass http://one_host_com/; 
    proxy_redirect off; 
    } 

}

然而,當我做一個AJAX調用從 '/一個' 測試平臺,象下面這樣:

$ .getJSON( '/ get_stuff',函數(data){..});

當我希望它轉到'/ one/get_stuff'時,該帖子轉到'/ get_stuff'。我怎樣才能讓Nginx指向NodeJS,但仍然保持該位置?有沒有更好的方法來實現這一點?

回答

0

嘗試刪除JavaScript中的前導斜槓,例如$.getJSON('get_stuff', function(data) { .. });。通過包含前導斜槓,您需要在域的根目錄下創建一條路徑,但我認爲您需要相對於您目前所處網址的路徑。

+0

如果沒有斜槓,請按照您的要求運行調用,仍然將請求URL設置爲「http://(ip)/ get_stuff」,但仍未調用「one」測試平臺。 – 2014-12-02 17:24:39

+0

經過一些修補之後,我發現你的步驟確實有幫助,但我還需要在HTML中設置基礎,'。一旦完成相對URL的AJAX工作,只要我在Nginx配置中重寫。 – 2014-12-02 18:16:34

+1

更多解釋;設置基地實際上並非必要。問題是我正在訪問'http://(ip)/ one'而沒有結尾的斜槓。隨着斜線,相對網址工作正常。看起來我只需要在我的Nginx配置中捕捉到它。 – 2014-12-02 18:25:41