You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

k6负载测试:如何指定自定义IP发起HTTP请求及证书问题解决

解决k6负载测试中指向自定义IP的HTTP/HTTPS请求问题

我刚好处理过类似的场景,来帮你一步步解决这两个问题:

1. 如何在k6中向自定义IP发起HTTP请求?

如果是HTTP协议,直接请求IP地址即可,还可以根据需要手动指定Host头:

import http from 'k6/http';

export default function () {
  // 直接请求自定义IP,可选添加Host头模拟域名请求
  const res = http.get('http://192.168.1.100', {
    headers: { 'Host': 'your-domain.com' }
  });
  console.log(`HTTP请求状态码: ${res.status}`);
}

如果是HTTPS协议,直接请求IP会触发证书验证失败(因为证书通常绑定主机名而非IP),针对这种情况的解决方案我会在下面详细说明。

2. 是否可强制k6的HTTP请求指向自定义IP?

完全可以,针对你提到的「DNS指向IP A,但要请求部署在IP B的同域名HTTPS服务」场景,有两种推荐方案:

方案一:使用k6的resolve参数自定义DNS解析(最优解)

k6支持在HTTP请求中通过resolve参数指定主机名到IP的映射,这样k6会直接用你指定的IP建立连接,同时请求的Host头保持原主机名,完美适配HTTPS证书验证逻辑(证书绑定的是主机名,和请求头匹配就能通过验证)。

示例脚本:

import http from 'k6/http';

export default function () {
  // 将your-domain.com强制解析到目标IP B(替换成你的实际IP)
  const res = http.get('https://your-domain.com', {
    resolve: {
      'your-domain.com': '192.168.1.100'
    }
  });
  console.log(`HTTPS请求状态码: ${res.status}`);
}

这个方案不需要修改系统配置,完全在脚本层面控制,灵活且符合安全验证要求,是最推荐的方式。

方案二:跳过HTTPS证书验证(仅适合测试环境)

如果必须直接用IP发起HTTPS请求,你可以关闭k6的证书验证,但这会跳过安全检查,只建议在内部测试环境使用:

方式1:通过命令行参数全局设置

k6 run --insecure-skip-tls-verify your-script.js

方式2:在脚本中单独配置请求

import http from 'k6/http';

export default function () {
  const res = http.get('https://192.168.1.100', {
    headers: { 'Host': 'your-domain.com' }, // 指定原主机名
    tls: { insecureSkipVerify: true } // 跳过证书验证
  });
  console.log(`HTTPS请求状态码: ${res.status}`);
}

临时方案:修改/etc/hosts

你提到的修改/etc/hosts将主机名指向IP B的方式确实有效,但这是系统级别的配置,会影响所有使用该主机名的请求,适合临时快速测试,但脚本层面的resolve参数更灵活可控。

关于k6 API的支持

k6的HTTP请求参数中的resolve选项就是专门为这类自定义IP指向场景设计的,完全满足你「通过k6 API实现该功能」的需求,不需要依赖外部工具或系统配置。

内容的提问来源于stack exchange,提问作者user3640248

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:39:53