mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-07-18 23:34:04 +02:00
added option to force ipv4 or ipv6 for http(s) monitor type
This commit is contained in:
parent
f27811c394
commit
91f34dde79
4 changed files with 44 additions and 0 deletions
13
db/knex_migrations/2025-06-03-0000-add-force-ipv4-ipv6.js
Normal file
13
db/knex_migrations/2025-06-03-0000-add-force-ipv4-ipv6.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
exports.up = function (knex) {
|
||||
return knex.schema
|
||||
.alterTable("monitor", function (table) {
|
||||
table.boolean("force_ip").defaultTo(null);
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = function (knex) {
|
||||
return knex.schema
|
||||
.alterTable("monitor", function (table) {
|
||||
table.dropColumn("force_ip");
|
||||
});
|
||||
};
|
|
@ -160,6 +160,7 @@ class Monitor extends BeanModel {
|
|||
smtpSecurity: this.smtpSecurity,
|
||||
rabbitmqNodes: JSON.parse(this.rabbitmqNodes),
|
||||
conditions: JSON.parse(this.conditions),
|
||||
forceIp: this.forceIp,
|
||||
|
||||
// ping advanced options
|
||||
ping_numeric: this.isPingNumeric(),
|
||||
|
@ -426,10 +427,18 @@ class Monitor extends BeanModel {
|
|||
}
|
||||
}
|
||||
|
||||
const agentFamily = this.forceIp ? (this.forceIp === "ipv4" ? 4 : 6) : undefined;
|
||||
|
||||
const httpsAgentOptions = {
|
||||
maxCachedSessions: 0, // Use Custom agent to disable session reuse (https://github.com/nodejs/node/issues/3940)
|
||||
rejectUnauthorized: !this.getIgnoreTls(),
|
||||
secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT,
|
||||
...(agentFamily ? { family: agentFamily } : {})
|
||||
};
|
||||
|
||||
const httpAgentOptions = {
|
||||
maxCachedSessions: 0,
|
||||
...(agentFamily ? { family: agentFamily } : {})
|
||||
};
|
||||
|
||||
log.debug("monitor", `[${this.name}] Prepare Options for axios`);
|
||||
|
@ -491,6 +500,7 @@ class Monitor extends BeanModel {
|
|||
if (proxy && proxy.active) {
|
||||
const { httpAgent, httpsAgent } = Proxy.createAgents(proxy, {
|
||||
httpsAgentOptions: httpsAgentOptions,
|
||||
httpAgentOptions: httpAgentOptions,
|
||||
});
|
||||
|
||||
options.proxy = false;
|
||||
|
@ -499,6 +509,10 @@ class Monitor extends BeanModel {
|
|||
}
|
||||
}
|
||||
|
||||
if (!options.httpAgent) {
|
||||
options.httpAgent = new http.Agent(httpAgentOptions);
|
||||
}
|
||||
|
||||
if (!options.httpsAgent) {
|
||||
let jar = new CookieJar();
|
||||
let httpsCookieAgentOptions = {
|
||||
|
|
|
@ -792,6 +792,7 @@ let needSetup = false;
|
|||
bean.url = monitor.url;
|
||||
bean.method = monitor.method;
|
||||
bean.body = monitor.body;
|
||||
bean.forceIp = monitor.forceIp;
|
||||
bean.headers = monitor.headers;
|
||||
bean.basic_auth_user = monitor.basic_auth_user;
|
||||
bean.basic_auth_pass = monitor.basic_auth_pass;
|
||||
|
|
|
@ -906,6 +906,21 @@
|
|||
</select>
|
||||
</div>
|
||||
|
||||
<div class="my-3">
|
||||
<label for="forceIp" class="form-label">{{ $t("Force Ip") }}</label>
|
||||
<select id="forceIp" v-model="monitor.forceIp" class="form-select">
|
||||
<option :value="null">
|
||||
{{ $t("None") }}
|
||||
</option>
|
||||
<option value="ipv4">
|
||||
ipv4
|
||||
</option>
|
||||
<option value="ipv6">
|
||||
ipv6
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<!-- Encoding -->
|
||||
<div class="my-3">
|
||||
<label for="httpBodyEncoding" class="form-label">{{ $t("Body Encoding") }}</label>
|
||||
|
@ -1129,6 +1144,7 @@ const monitorDefaults = {
|
|||
parent: null,
|
||||
url: "https://",
|
||||
method: "GET",
|
||||
forceIp: null,
|
||||
interval: 60,
|
||||
retryInterval: 60,
|
||||
resendInterval: 0,
|
||||
|
|
Loading…
Add table
Reference in a new issue