node接口部署到线上无法访问

我的服务器系统是 Linux,站点通过 Nginx 配置,目前

服务器安全组已开
1629794506(1).jpg

防火墙端口已开
1629794506.jpg

部署好 node 接口后,运行成功
image.png

mongodb 也运行成功
image.png

网站可以访问,但是加上:3003端口后,接口无法请求
image.png

请问是为什么呢?


按照二楼的说法,我引入了 os 依赖去获取 IPv4 地址,代码如下:

const http = require('http')
const express = require('express')
const app = express()
const os = require('os')
const mongoose = require('mongoose') // 引入 mongoose

// 连接 mongodb 数据库 writeOff
mongoose.connect('mongodb://localhost/writeOff', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
mongoose.set('useFindAndModify', false)

// 监控连接状态
const db = mongoose.connection
db.on('connected', () => {
  console.log('mongoose connection success')
})
db.on('error', () => { // 数据库连接失败
  console.log('mongoose connection fail')
})

// 允许跨域
app.all('*', (req, res, next) => {
  // 设置允许跨域的域名,* 代表允许任意域名跨域
  res.header('Access-Control-Allow-Origin', '*')
    // 允许的 header 类型
  res.header('Access-Control-Allow-Headers', 'content-type')
    // 跨域允许的请求方式 
  res.header('Access-Control-Allow-Methods', 'DELETE,PUT,POST,GET,OPTIONS')
  if (req.method.toLowerCase() == 'options')
    res.sendStatus(200); // 让 options 尝试请求快速结束
  else
    next()
})

//获取本机ipv4地址
function getIPv4() {
  //同一接口可能有不止一个IP4v地址,所以用数组存
  let ipv4s = []
    //获取网络接口列表对象
  let interfaces = os.networkInterfaces();
  Object.keys(interfaces).forEach((key) => {
    interfaces[key].forEach((item) => {
      //跳过IPv6 和 '127.0.0.1'
      if ('IPv4' !== item.family || item.internal !== false) return
      ipv4s.push(item.address); //可用的ipv4s加入数组
      // console.log(key + '--' + item.address);
    })
  })
  return ipv4s[0] //返回一个可用的即可
}
let ipv4 = getIPv4()

// http请求
http.createServer(app).listen(3003, '0.0.0.0', (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('Listening at http://localhost:' + 3003 + '\n' + 'or at http://' + ipv4 + ':' + 3003)
})

// 设计数据模型,创建集合
const schema = {
  tel: Number
}
var Kitten = mongoose.model('2021-renovation', schema)

// 
app.get('/add_code', (req, res) => {
  res.send(req.query)
})

依旧成功运行

image.png

但是仍然无法访问


经测试 3000 3001 3002 端口均可正常运行接口

阅读 4.2k
1 个回答

從你的描述現象與命令檢查結果看,本地可以訪問,外網地址不能,應該是你 Node 服務監聽的地址是 127.0.0.1,而不是 0.0.0.0。你需要檢查一下你的 Node 代碼,修改掉監聽地址。

或是修改 Nginx 配置,反代 Node 的地址。

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