express api接口全部404,但是能匹配上/*(nginx配置问题)

express写的前端接口,请求路径都对,还是返回404。

场景:我在腾讯云服务器centos的2020端口(任意端口)运行 express写的前端接口,想将这个端口通过服务器nginx反向代理到 443端口,供微信公众号(或者小程序)调用。

问题:express接口完全没问题,可是配置好之后,请求接口都返回404,但是我在express接口文件中设置app.get('/*', (req,res) => {res.json({code: 400, data: '哈哈哈哈哈哈哈'})}),请求接口返回了 ‘哈哈哈’,其他接口都是404

express 接口文件:

const express = require('express')
const app = express()

app.get('/api/getname', (req, res) => {
  console.log('aaaaaa')

  res.json({
    code: 200,
    data: 'aaaaaaaaa',
  })
})

app.post('/api/get', (req, res) => {
  console.log('post====get')

  res.json({
    code: 200,
    data: 'namenannnaaa',
  })
})

app.get('/*', (req, res) => {
  console.log('get*///')

  res.json({
    code: 400,
    data: '哈哈哈哈哈',
  })
})

app.listen(2020, () => {
  console.log('Server has started.port on 2020')
})

nginx配置:

server {
    listen       443 ssl;
    server_name  program.test.com;

    # ....省略配置

    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
    location /program/ { # 微信公众平台接口测试
        proxy_pass http://127.0.0.1:2020; # !!!重点,就是这里导致出了问题!!!
        proxy_redirect off;
    }
}

如上配置,在浏览器中输入 https://program.test.com/program/api/getname  只能返回接口配置中 /* 的内容,而不能正确匹配 /api/getname 中的内容

这个问题困扰了整个周六,做了如下尝试:

1. 开始以为是express接口文件写得不对,反复审查了好多遍,还从官网扒了demo尝试了一遍,都是 404,排除这个原因;

2.换成 koa 框架 写接口,也不管用,接口也是全部返回 404,只有配上 /* 之后才会返回 /* 的内容,排除框架问题;

3.将端口开放,直接使用2020端口,不走nginx的代理,这里需要在服务器防火墙中放开2020端口,并在服务器控制台的安全组中 开放 2020端口,配置好后,直接用 http://program.test.com:2020/program/api/getname,发现直接无法访问,

哈哈哈,这里因为这时候的路径不对了,去掉标红的 program 即可,http://program.test.com:2020/api/getname,到这里,终于访问到了自己的数据,成功返回了 ‘aaaaaa’,说明api完全没问题,那么问题肯定出在了 nginx配置上,(是我错怪了 express)

4. 解决问题

再次查询了 nginx 配置,发现了端倪,大家看上边 nginx配置的这里:

这里,在 proxy_pass http://127.0.0.1:2020 后边需要加个 / , 至于为什么,参考  看这里

改为:

location /program/ { # 微信公众平台接口测试
    proxy_pass http://127.0.0.1:2020/; # 以 / 结尾,就不会匹配接口文件中以 /program/ 开头
    proxy_redirect off;
}

这样,记得运行 nginx -s reload  重启一下nginx

然后,再通过 https://program.test.com/program/api/getname  终于能正常返回  ‘aaaaaa’ 了,!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值