Docker中n8n经Caddy反向代理后Webhook URL带5678端口问题求助
解决n8n Webhook URL带容器端口的问题
核心原因
n8n默认会用容器内部的5678端口生成Webhook URL,无法自动识别反向代理后的外部访问地址,必须手动指定外部的域名、协议等参数。
步骤1:给n8n设置环境变量
运行n8n容器时,添加以下环境变量,强制n8n使用外部访问参数生成URL:
N8N_HOST: 填写你的外部域名,比如example.com或n8n.example.comN8N_PROTOCOL: 设置为httpsWEBHOOK_URL: 指定Webhook基础地址,比如https://example.com/webhookVUE_APP_URL_BASE_API: 设置为https://example.com/rest(对应你的外部域名)
Docker运行命令示例:
docker run -d \ --name n8n \ -p 5678:5678 \ -e N8N_HOST="example.com" \ -e N8N_PROTOCOL="https" \ -e WEBHOOK_URL="https://example.com/webhook" \ -e VUE_APP_URL_BASE_API="https://example.com/rest" \ n8nio/n8n
如果使用docker-compose,在n8n服务的environment字段中添加上述变量即可。
步骤2:优化Caddy配置(可选)
给Caddy反向代理添加X-Forwarded-Host头部,确保n8n能获取正确的外部域名:
n8n.example.com { reverse_proxy localhost:5678 { header_up X-Forwarded-Proto https header_up X-Forwarded-Port 443 header_up X-Forwarded-Host {host} } }
步骤3:验证效果
重启n8n容器和Caddy服务后,打开n8n界面查看Webhook节点的URL,此时应该已经是不带5678端口的正确地址,Telegram等外部服务即可正常连接Webhook端点。
内容的提问来源于stack exchange,提问作者Amir Hossein Bagheri
相关产品推荐
相关产品推荐

