nginx和express router get + post request issue

时间:2016-01-21 16:16:11

标签: node.js express nginx

我正在尝试在nginx后面设置2个节点/快速站点。我想我已经尝试过在论坛中找到的所有可能的解决方案,但它们只对我有用。

我想要达到的目的是: - 一个域有2个节点/快递应用程序 1.)node.dev/site3 2.)node.dev/site4

这对主索引文件一切正常,但是选择任何按钮/路由我都会收到404错误。

这是nginx设置:

server {
    listen 80;
    root  /var/www/node.dev;
    server_name node.dev;
    index index.htm index.html;
    access_log /var/log/nginx/node;
    charset utf8;
    sendfile off;
    location /site3/ {
        proxy_pass http://0.0.0.0:8088/;
        #rewrite ^/site3/(.*)$ /$1 break;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_cache_bypass $http_upgrade;
    }

    location /site4/ {
    proxy_pass http://0.0.0.0:8080;
    #rewrite ^/site4/(.*)$ /$1 break;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_cache_bypass $http_upgrade;
}

}

这是我的快速路线设置:

var express   = require('express');
module.exports = function(app) {
var router = express.Router();
router.get('/ping', function(req, res){
      res.send("pong!", 200);
});
router.get('/walk/:walk_name', function(req, res, next) {
  res.send("walk!", 200);
});
router.get('/walk', function(req, res, next) {
  res.send("No walker!", 200);
});
router.get('*', function(req, res) {
    res.sendfile('./public/index.html'); // load the single view file (angular     will handle the page changes on the front-end)
});
app.use('/', router);
}

使用//node.dev/site3访问该站点会按预期返回索引文件,但是例如单击WALK,它应该返回//node.dev/site3/walk,而是返回http://node.dev/walk并且有404错误。

我无法对节点/快递应用进行任何更改。有没有办法用nginx配置来实现这个目的。

请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:0)

尝试将proxy_pass设置为127.0.0.1而不是0.0.0.0。前者表示“localhost”,后者表示“任何主机”。虽然您可能会听“任何IP”,但您希望连接到/ specific / IP。

可能还有其他问题,但这可能有所帮助。