自从 TradingView 开放他们的 webhook 支持以来,我一直在努力弄清楚为什么我的服务器没有收到任何信号。到目前为止,我已经完成了以下工作:
- 确保端口已打开,确保 TradingView 实际上正在发送 POST 请求
- 尝试在准系统 nodejs 服务器、flask 服务器上进行 POST,最后尝试使用 nginx 反向代理到 flask 服务器。
- 在 webhook.site 上交叉引用传入的 POST 标头和正文,在 Postman 以及其他工具上复制它,我的服务器很好地收到了它们
您可以在此处实时看到信号:http ://webhook.site/#!/48e29a5b-d266-4021-8b96-0039371b3643/2005d010-e3ae-4077-8808-af34491f5a4d/
但是在交付过程中的某个地方显然出了问题,因为在 nginx 日志和 unix 日志中甚至没有任何请求的痕迹。这绝对不是防火墙或 CORS 问题,或者我在使用工具进行复制时也会遇到同样的问题,对吧?有谁能帮我破解这个案子吗?
这是我的 nginx 配置:
server {
listen 80;
server_name lunarlabs.org;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name lunarlabs.org;
ssl_certificate /etc/letsencrypt/live/***.org/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/***.org/privkey.pem;
# ...
access_log /var/log/nginx.log;
error_log /var/log/nginxerror.log;
root /var/www/html/public;
index index.php;
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,X-Forwarded-For,content-length';
include proxy_params;
proxy_pass http://unix:/home/tvhook/***;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
我设置的演示 webhook 服务器可以通过https://lunarlabs.org/webhook访问——任何 JSON 格式的 POST 数据都应该返回 200。但是 TradingView 的信号看起来真的不喜欢我的服务器或我的服务器真的不喜欢他们的要求。