Nginx,Node,Angular - 子文件夹API / URL配置

时间:2014-03-09 01:02:38

标签: node.js angularjs nginx

我目前有一个节点/角度应用程序,当直接指向配置的端口时,按预期运行(8081用于解释我的情况)。我可以按预期发布,获取,放置,删除。

我的目标是让节点应用程序在mydomain.com/subfolder上运行。当nginx配置位置为“/”时,一切都按预期工作。配置如下:

upstream app_yourdomain {
    server 127.0.0.1:8081;
}

server {
    listen 0.0.0.0:80;
    server_name yourdomain.com yourdomain;
    access_log /var/log/nginx/yourdomain.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://app_yourdomain/;
      proxy_redirect off;
    }
}

但是,只要我将位置更改为/ subfolder,我的get,post,put,delete请求就会返回404响应。但是返回了在节点应用程序中配置的index.html。配置如下:

upstream app_yourdomain {
    server 127.0.0.1:8081;
}

server {
    listen 0.0.0.0:80;
    server_name yourdomain.com yourdomain;
    access_log /var/log/nginx/yourdomain.log;

    location /subfolder {
      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://app_yourdomain/;
      proxy_redirect off;
    }
}

在我的角度工厂中,我的请求的结构类似于return $http.get('/subfolder');return $http.post('/subfolder', {data: data});

并且,在我的节点应用程序中,我的路由定义为app.get('/subfolder', somefunction);app.post('/subfolder', somefunction);

同样,当我从域的根目录运行应用程序时,它工作正常。但是,当我将其配置为位于域的子文件夹中时,请求将不再起作用。

我的最终目标是让多个节点应用程序从主域的子文件夹运行。我已经和它斗争了一段时间,并且发现了一些用于在单个服务器上托管多个节点应用程序的文章,但它们似乎面向拥有单独的域。我希望(如果可能的话)将这些作为同一域的单独应用程序运行。

任何想法/技巧/指针?谢谢!

1 个答案:

答案 0 :(得分:2)

将您的Nginx文件修改为如下所示:

 upstream node{
        server  127.0.0.1:3000;
    }

listen 0.0.0.0:80;
server_name yourdomain.com yourdomain;
access_log /var/log/nginx/yourdomain.log;

location /node {
      rewrite /node(.*) $1 break;
      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://node;
      proxy_redirect http://node/ /node;
}

我从这里得到了上述内容:http://skovalyov.blogspot.com/2012/07/deploy-multiple-node-applications-on.html它适用于我