2014-12-01 66 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