k6 将本地主机重定向到环回

k6 redirects localhost to loopback

我在 Mac 上,我正在尝试 运行 我的 k6 脚本针对 http://localhost:4200(angular 应用程序)在本地。

angular 应用程序正在 运行ning,我可以通过浏览器访问它并使用 curl

我的 k6 脚本将基础 URL 设置为 http://localhost:4200。然而,所有请求都被 http://127.0.0.1:4200 提出,而被 MacOS.

拒绝

如何强制 k6 不将 localhost 重写为环回地址?

编辑

添加 curl -vv 的各种输出。

localhost:4200

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 4200 (#0)
> GET / HTTP/1.1
> Host: localhost:4200
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Content-Type: text/html; charset=utf-8
< Accept-Ranges: bytes
< Content-Length: 942
< ETag: W/"3ae-UQojFJZul+b6hEhgbvnN6wFCVuA"
< Date: Thu, 20 Jan 2022 21:38:55 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< 
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>MyApp</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="assets/scripts/apm.js"></script>
  <link rel="apple-touch-icon" sizes="180x180" href="/assets/images/apple-touch-icon.png">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/assets/images/favicon-16x16.png">
  <link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="styles.css"></head>
<body>
  <app-root></app-root>
<script src="runtime.js" type="module"></script><script src="polyfills.js" type="module"></script><script src="styles.js" defer></script><script src="vendor.js" type="module"></script><script src="main.js" type="module"></script></body>
</html>
* Connection #0 to host localhost left intact
* Closing connection 0

127.0.0.1:4200

*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connection failed
* connect to 127.0.0.1 port 4200 failed: Connection refused
* Failed to connect to 127.0.0.1 port 4200: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 127.0.0.1 port 4200: Connection refused

编辑 2

主机文件

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal

没有应用程序在端口 4200 上侦听您的 IPv4 地址 127.0.0.1。 127.0.0.1 是 IPv4 环回地址。当 k6 向 localhost 发出请求时,此主机名解析为 IPv4 127.0.0.1.

但是,您的应用程序似乎正在侦听端口 4200 以获取您的 IPv6 地址 ::1。 ::1 是 IPv6 环回地址。 curl 将主机名 localhost 解析为其 IPv6 地址。

您如何将应用程序绑定到端口?通常,当绑定到主机的所有接口时,您会使用特殊的 IP 地址 0.0.0.0.

我看到一个潜在的解决方案:

  • 使您的应用程序绑定到 IPv4 IPv6,通常通过绑定到地址 0.0.0.0.
  • 来完成
  • 更改您的 k6 脚本以直接连接到 IPv6 ::1
  • 指定 --dns "policy=preferIPv6" 或将 dns:{policy:"preferIPv6"} 添加到您的 options(自 0.29.0 起)
  • 在您的 OS 中禁用 IPv6。这是一个巨大的变化,我不推荐它
  • 更改主机文件以将本地主机解析为 IPv4 地址