nginx反向代理nodejs服务器不成功?

我做了一个windows下简单的nginx反向代理node服务的配置,单独的打开nginx监听的地址端口没问题(127.0.0.1),单独访问node监听的端口也没问题(127.0.0.1:9090)。但是,用nginx反向代理node监听的端口之后,访问127.0.0.1/x/y,页面一直是404,node服务器一直收不到请求。
经换机器测试在windows 10系统上可用,windows server 2016不可用,防火墙已关闭。
简单的代码示例如下图:

// node服务器端代码app.js
const Application = require('koa');

const app = new Application();

app.use(ctx => {
    console.log('nginx代理');
    ctx.response.body = {
        test: 'nginx代理到node'
    };
});

app.listen(9090, () => {
    console.log('监听9090端口');
});
// nginx.conf下server的配置,其他默认
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

    location /x/ {
        proxy_pass http://127.0.0.1:9090;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

麻烦大神指导一下,跪谢~~~
环境:
操作系统:windows server 2016
node版本:v12.16.1
koa:^2.11.0
nginx:1.17.9

阅读 5.2k
4 个回答

注意 proxy_pass 的结尾。

location /x/ {
    proxy_pass http://127.0.0.1:9090/; # 有反斜杠
}
# 访问 http://127.0.0.1/x/y 会反向代理到 http://127.0.0.1:9090/y

location /x/ {
    proxy_pass http://127.0.0.1:9090;  # 无反斜杠
}
# 访问 http://127.0.0.1/x/y 会反向代理到 http://127.0.0.1:9090/x/y

node server服务地址: http://127.0.0.1:2000/api/abc

   server {
        listen 80;
        server_name 127.0.0.1;
        index index.html index.htm;
        location / {
            root /usr/local/var/www;
        }
        location /api {
            proxy_pass http://127.0.0.1:2000/api;
        }
    }

代理后: http://127.0.0.1/api/abc 返回代理服务,除了 /api开头的其他路径内容访问不受影响

location / {
    proxy_pass    http://127.0.0.1:9000;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题