curl: 用 Curl 命令访问 Unix Socket 接口的方法

Tags: manual 

本篇目录

说明

经常遇到一些监听地址不是 IP:Port 而是 unix socket 的程序,这些程序如果使用的是 HTTP 协议,unix socket 接口也可以用 curl 访问。

例如 ingress-nginx 的监听地址为 unix:/tmp/nginx-status-server.sock:

server {
        listen unix:/tmp/nginx-status-server.sock;
        set $proxy_upstream_name "internal";

        keepalive_timeout 0;
        gzip off;

        access_log off;

        location /healthz {
                return 200;
        }

        location /nginx_status {
                stub_status on;
        }
        ... 省略...
}

用 curl 访问它的 unix socket 的方法如下:

$ curl --unix-socket /tmp/nginx-status-server.sock http://localhost/nginx_status
Active connections: 77
server accepts handled requests
 64273 64273 971368
Reading: 0 Writing: 12 Waiting: 65

--unix-socket 指定 unix socket 文件的地址, http://localhost/nginx_status 是要请求的路径。

注意 localhost 可以根据实际情况更改成其它数值但不可省略,如果省略后变成 http://nginx_status,那么 nginx_status 会被认作是 Host,Path 被认为是 /:

$ curl -v  --unix-socket /tmp/nginx-status-server.sock http://nginx_status
* Expire in 0 ms for 6 (transfer 0xe464ab3dd0)
*   Trying /tmp/nginx-status-server.sock...
* Expire in 200 ms for 4 (transfer 0xe464ab3dd0)
* Connected to nginx_status (/tmp/nginx-status-server.sock) port 80 (#0)
> GET / HTTP/1.1
> Host: nginx_status
> User-Agent: curl/7.64.0
> Accept: */*

参考

  1. 李佶澳的博客
  2. Can cURL send requests to sockets?

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球