我正在尝试使用 QuotaGuard 静态 IP 来托管 Next.js 应用程序。Next API 路由正在运行 Prisma,而后者又向受保护的 Microsoft SQL Server 发出直接的 db 请求。
客户已将我的 IP 列入白名单以进行本地开发,并且该应用程序运行良好。但是在 Heroku 上,如果没有 QuotaGard,您将无法获得静态 IP。
我认为我没有正确设置 QuotaGuard 或 server.js 文件。该应用程序的其余部分工作正常。以下是这些文件:
预期行为:
- 服务器将其 url 代理到 QuotaGuard 提供的 URL
- MS Sql Server 可以将 IP 列入白名单
- Next.js server.js 使用“http-proxy-middleware”代理请求
实际行为:
- 应用主页只显示“这是一个代理服务器”
- QuotaGuard 仪表板不显示任何请求
- prisma 客户端无法连接(连接被拒绝)
// server.js
// BASICALLY A COMBO OF THESE TWO OPTIONS:
// - https://quotaguard.freshdesk.com/support/solutions/articles/5000013744-getting-started-with-node-js-standard-http-library-quotaguard
// - https://medium.com/bb-tutorials-and-thoughts/next-js-how-to-proxy-to-backend-server-987174737331
const express = require('express')
const { parse } = require('url')
const next = require('next')
const { createProxyMiddleware } = require('http-proxy-middleware')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
// proxy middleware options
const options = {
target: process.env.QUOTAGUARDSTATIC_URL, // target host
changeOrigin: true, // needed for virtual hosted sites
ws: true, // proxy websockets
}
app.prepare()
.then(() => {
const server = express()
if (!dev) {
server.use('*', createProxyMiddleware({ ...options }))
}
server.all('*', (req, res) => {
const parsedUrl = parse(req.url, true)
return handle(req, res, parsedUrl)
})
server.listen(process.env.PORT, (err) => {
if (err) throw err
console.log(`> Ready on http://localhost:${process.env.PORT}`)
})
})
.catch((err) => {
console.log('Error:::::', err)
})
您可以在以下位置查看实时应用程序https://planes-planner-staging.herokuapp.com/