环境

  • 有一个域名: blog.dayday.com, 但是没有配置 DNS
  • 有一个 nginx 服务器, ip 为: 10.45.119.120, 然后再 nginx 上配置了对 blog.dayday.com 的转发规则: /v1/~

那么有什么方法可以请求该 nginx 地址, 命中 nginx 的转发规则呢

解决方案

curl -X POST https://10.45.119.120/v1/login \
  -H "Host: blog.dayday.com" --insecure
  • -H "Host: blog.dayday.com": 强制请求头中 Host 字段为我们想要的域名
  • --insecure: 跳过证书校验(如果是 IP 访问且证书不匹配)

这样请求就会走到 IP 地址, 但服务器或者 nginx 会看到请求头中的 Host 是 blog.dayday.com, 从而走到正确的路由

夹带点其他干货

如果想要发送 POST 同时又只看响应头, 可以使用 -D -:

curl -X POST https://10.45.119.120/v1/login \
  -H "Host: blog.dayday.com" --insecure \
  -D -
  • -D -: 会把响应头输出到标准输出, 随后响应体仍然打印

请求携带 cookie

curl https://10.45.119.120/v1/me \
  -b "token=xxx"

将 cookie 保存到文件,并且每次请求之后更新 cookie 文件(token 更新)

curl -b cookies.txt -c cookies.txt \
  http://10.45.119.120/v1/me
  • -b cookies.txt:读取当前目录下的 cookie.txt 文件作为 cookie
  • -c cookies.txt:将返回的 cookie 保存/更新 到当前目录下的 cookie.txt 文件