使用 Fastify 和 Fastify-HTTP-Proxy 绑定接口
Binding Interfaces With Fastify and Fastify-HTTP-Proxy
我在具有三个 IPv4 地址的 VPS (Ubuntu 19.x) 上使用 fastify
和 fastify-http-proxy
。我可以使用(示例 IP)验证它们的功能:
curl --interface 45.63.23.63 api.ipify.org
curl --interface 45.63.72.48 api.ipify.org
curl --interface 45.63.40.39 api.ipify.org
我看到 here 您可以通过向 Node 的 http
请求提供 localAddress
来提供接口。有人用 fastify
或 fastify-http-proxy
做过吗?我已经搜索了两个,但在每个包中都找不到支持。
I 运行 一个 API 将流量转发到主机。最近,它收到了大量(合法)流量,并且由于来自单个地址的高流量,主机(索尼)的 DDoS 防护对其进行了标记和阻止。联系时,他们声称无法删除该块,但我可以自由更改我的 VPS' IP。为了防止将来出现这种情况,我想几乎随机化它使用的接口。
谢谢!
您可以通过设置来完成:
server.register(require('fastify-http-proxy'), {
upstream: 'http://my-api.example.com',
prefix: '/api',
http: {
requestOptions: {
localAddress: '45.63.72.48'
}
}
})
这样,你所有的请求都会有那个IP。使用 this settings 支持所有请求选项,因为 fastify-reply-from
在幕后使用。
但是你有 3 个 ips 可以使用,所以你需要为每个不同的路由注册三倍的插件,或者像这样构建一个“round getter”也应该有效:
const ips = [
'45.63.23.63',
'45.63.72.48',
'45.63.40.39'
]
let endlessIterator = ips[Symbol.iterator]()
const roundIps = {
get localAddress () {
let v = endlessIterator.next().value
if (!v) {
endlessIterator = ips[Symbol.iterator]()
v = endlessIterator.next().value
}
return v
}
}
server.register(require('fastify-http-proxy'), {
upstream: 'http://my-api.example.com',
prefix: '/api',
http: {
requestOptions: roundIps
}
})
我在具有三个 IPv4 地址的 VPS (Ubuntu 19.x) 上使用 fastify
和 fastify-http-proxy
。我可以使用(示例 IP)验证它们的功能:
curl --interface 45.63.23.63 api.ipify.org
curl --interface 45.63.72.48 api.ipify.org
curl --interface 45.63.40.39 api.ipify.org
我看到 here 您可以通过向 Node 的 http
请求提供 localAddress
来提供接口。有人用 fastify
或 fastify-http-proxy
做过吗?我已经搜索了两个,但在每个包中都找不到支持。
I 运行 一个 API 将流量转发到主机。最近,它收到了大量(合法)流量,并且由于来自单个地址的高流量,主机(索尼)的 DDoS 防护对其进行了标记和阻止。联系时,他们声称无法删除该块,但我可以自由更改我的 VPS' IP。为了防止将来出现这种情况,我想几乎随机化它使用的接口。
谢谢!
您可以通过设置来完成:
server.register(require('fastify-http-proxy'), {
upstream: 'http://my-api.example.com',
prefix: '/api',
http: {
requestOptions: {
localAddress: '45.63.72.48'
}
}
})
这样,你所有的请求都会有那个IP。使用 this settings 支持所有请求选项,因为 fastify-reply-from
在幕后使用。
但是你有 3 个 ips 可以使用,所以你需要为每个不同的路由注册三倍的插件,或者像这样构建一个“round getter”也应该有效:
const ips = [
'45.63.23.63',
'45.63.72.48',
'45.63.40.39'
]
let endlessIterator = ips[Symbol.iterator]()
const roundIps = {
get localAddress () {
let v = endlessIterator.next().value
if (!v) {
endlessIterator = ips[Symbol.iterator]()
v = endlessIterator.next().value
}
return v
}
}
server.register(require('fastify-http-proxy'), {
upstream: 'http://my-api.example.com',
prefix: '/api',
http: {
requestOptions: roundIps
}
})