我有一个简单的 API 可以监听http://localhost:5000
并且我有 Nginx 作为反向代理来监听https://example.com
。
我已配置 Nginx 将标头发送到我的 API:
location /
{
proxy_pass http://localhost:5000;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
但是,这里有些东西不起作用,因为我的 JWT 提供程序库将我重定向到http://
而不是https://
.我怀疑问题可能出在 Nginx 和我的 API 之间。
我想要一个简单的命令行实用程序来监视或记录 API 端口上的 HTTP 流量。
我看到这些问题,似乎没有一个适合我的要求(而且它们也很旧):
https://superuser.com/questions/604998/monitor-tcp-traffic-on-specific-port
我尝试过tcpdump
,但作为网络开发人员,输出对我来说是不可读的。我正在寻找类似HTTPie
输出的东西。
https://superuser.com/questions/23180/whats-the-easiest-way-to-sniff-tcp-traffic-data-on-linux
事实上我想要标题。这个问题是关于数据本身的。
https://askubuntu.com/questions/257263/how-to-display-network-traffic-in-the-terminal
所有这些应用程序仅显示统计数据与网络有关。不是请求/响应。
那么,是否有一个简单的实用程序可以输出 HTTP 请求/响应标头和正文并捕获它们并将它们打印到终端或文件?
我的服务器运行 Debian 11。
答案1
与 HTTPie 或 Fiddler 不同,代理和 API 服务器之间的数据包捕获器无法直接了解哪些数据包是调试会话的一部分,哪些可能是不相关的请求。
我建议tcpdump
使用 Wireshark 或类似工具捕获并分析捕获的转储。您需要一个像tcpdump -i any -Knpv -w /some/where/output.cap tcp port 5000
.
使用 Wireshark,您可以打开转储文件,选择任何数据包,然后从鼠标右键快捷菜单中选择“Follow -> TCP Stream”。这应该为您提供客户端和服务器之间的对话:客户端请求及其所有标头,以及服务器响应及其标头。