问题场景:
我想实现在nginx的upstream服务组中获取当服务器是否轮询到了backup;如果轮询到我就在nginx的配置文件中发送一个接口请求,类似于飞书(钉钉)的消息通知 告诉当前的服务已经backup了
实现的方式:
我本地是mac的开发环境下载了openresry通过lua脚本进行请求接口,下载了resty.http
实现了请求,因为请求的地址是https的,我本地使用mkcert
生成了一个免费的SSL的证书,但是请求的时候一直报错:无法解析域名
;
下方是伪代码:
worker_processes 1;error_log /usr/local/etc/openresty/logs/error.log;error_log /usr/local/etc/openresty/logs/info.log info;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 443 ssl; listen [::]:443 ssl; server_name demo.com; ssl_certificate /Users/yangfan/demo.com.pem; ssl_certificate_key /Users/yangfan/demo.com-key.pem; location / { root html; index index.html index.htm; } location /fs { content_by_lua_file /usr/local/etc/openresty/tests/upstream.lua; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }}
lua的代码:
local http = require "resty.http"local cjson = require "cjson"local httpc = http.new()local userData = { msg_type = "post", content = { post = { zh_cn = { title = "222", content = { { tag = "text", text = "222222", }, { tag = "at", user_id = "all", }, }, }, }, },}local jsonStr = cjson.encode(userData)local res, err = httpc:request_uri("https://open.f.xxxx.cn/open-apis/bot/v2/hook/xxxxxx", { method = "POST", body = jsonStr, headers = { ["Content-Type"] = "application/json", },})if res == nil then ngx.log(ngx.INFO,"=====================>>>>>>>>>>>>>>>>>1111111111 ".. err)else ngx.log(ngx.INFO,"=====================>>>>>>>>>>>>>>>>>000000000000 ".. res) ngx.log(ngx.INFO,"=====================>>>>>>>>>>>>>>>>>33333333333333 ".. err)end
疑惑:
你应该做的是在nginx之外持续的ping primary 是不是不通。
监控系统应该游离在系统之外
答案:
针对你的问题,有几个方面需要注意:
https://open.f.xxxx.cn/open-apis/bot/v2/hook/xxxxxx
)是正确的,并且DNS可以正确解析。你可以使用ping
或nslookup
命令来测试域名解析是否正常。res
是nil
,则err
变量应该包含错误信息。你应该检查err
的内容来了解为什么请求失败。此外,你的日志输出语句中,当res
不为nil
时,你重复输出了err
,这是不必要的,因为err
只在res
为nil
时才有意义。其他实现方式:
除了使用Lua脚本在Nginx内部发送请求外,还有其他方式可以实现你的需求:
ngx_http_json_filter_module
。针对你的代码和配置:
最后,请注意,由于你的代码和配置包含敏感信息(如URL和证书路径),请确保在实际环境中不要公开这些信息。
我试图在端口80上建立一个连接localhost并发送一个简单的http get请求,同时运行wireshark并查看报头。下面是我的代码: 但当我编译并运行它时,它会给我带来很多错误。这是Errros的图像。发生此错误后,我将send函数更改为这个 send(sockfd,“get/http/1.1\r\n host:localhost\r\n\r\n”,strlen(“get/http/1.1
我在网上找到了这个脚本: 但我不明白如何与PHP一起使用它,也不明白params变量内部的内容是什么,也不明白如何使用它。我能帮个忙吗?
问题内容: 我正在尝试发出POST请求,但无法完成。另一端什么也没收到。 这是应该如何工作的吗?我知道该功能,但我想我不能使用它,因为它不能用测试,对吗? 问题答案: 您基本上有正确的想法,只是发送错误的表格。该表格属于请求的正文。
问题内容: 在Java中,如何编写HTTP请求消息并将其发送到HTTP WebServer? 问题答案: 你可以使用。 示例(从此处开始),进行了改进。包括在链接腐烂的情况下:
问题内容: 我正在学习Java套接字。我正在尝试向Facebook发送HTTPS GET请求,如下所示: 然后,我尝试侦听来自服务器的传入数据,如下所示: 但是我没有从服务器获得任何返回数据。为什么? 问题答案: 两个答案。 您正在尝试与HTTPS服务器通信。这要求您建立一个SSL / TLS通道。这在纯套接字上确实很难>>您必须实现连接协商,密钥链的客户端验证,会话加密/解密等。 一个更合理的方
Nginx反向代理转发到内网穿透的本地服务失败。 我的nginx部署在阿里云服务器上,然后想将请求转发到内网穿透的本地服务上,总是404,网上找了很多文章,也不知道是哪里出现了问题,求解! 这是域名对应的本地服务IP端口。 http://orzzzsy.nat300.top -> 127.0.0.1:9999 阿里服务器能够访问我内网穿透的域名,获取到数据 我预期是能够通过访问nginx服务器,也