Describe the problem/error/question
N8N was installed in Ubuntu, nginx has been configured with reverse proxy.
All my workflows works perfectly in Test mode, like I shared here a very simple RSS reader, click button and the workflow will load remote RSS feed and display the first time in the ending form.
If I test it with Test URL, it works as expected. But if I publish it(or any other workflows), when I run the Production URL, after clicking button in the first Form, it’s button keeps loading and nothing happened(the backend RSS feed has never been read remotely).
In the Executions list, all of my published workflows’s status are “Queued”, Started are always “Starting soon”, the Run Time will keep increasing and never end.
My assumption is something blocks the prodution exection in the n8n backend. Thank you for helping out, I am stacked here for 2 days.
This screenshot is when I run the workflow in Test mode, work perfectly.
What is the error message (if any)?
This screenshot is after publishing the workflow, all executions are pending.
Please share your workflow
(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)
{
"nodes": [
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "e2ffe594-180d-4e1d-b869-8056ac67015d",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "87c5a171-9ab9-4043-a72a-32aec218fe63",
"name": "pubDate",
"type": "string",
"value": "={{ $json.pubDate }}"
},
{
"id": "978b05c9-6e6b-4a18-bc06-4de785b19413",
"name": "conteudo",
"type": "string",
"value": "={{ $json.content }}"
}
]
},
"options": {}
},
"id": "3bc80f1d-ba03-4e66-bc75-e191777196a0",
"name": "Edit Fields3",
"type": "n8n-nodes-base.set",
"position": [
496,
320
],
"typeVersion": 3.4
},
{
"parameters": {
"maxItems": 10
},
"id": "5585ebb1-e06b-42e2-aa0a-4011e94ece3f",
"name": "Limit",
"type": "n8n-nodes-base.limit",
"position": [
928,
320
],
"typeVersion": 1
},
{
"parameters": {
"url": "https://www.technologyreview.com/topic/artificial-intelligence/feed/",
"options": {
"ignoreSSL": false
}
},
"id": "ecba6a40-44cb-4834-8927-aa87a55cca8f",
"name": "My RSS 01",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
272,
320
],
"typeVersion": 1.1,
"alwaysOutputData": true,
"onError": "continueRegularOutput"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"combinator": "and",
"conditions": [
{
"id": "30d4f694-9378-42b4-b1d5-cbc38fb3e7fe",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.pubDate }}",
"rightValue": "={{ $today.minus({ days: 1 }) }}"
}
]
},
"options": {}
},
"id": "8fdb9e97-6046-437f-926b-8a9f4eaf3854",
"name": "Filter1",
"type": "n8n-nodes-base.filter",
"position": [
736,
320
],
"typeVersion": 2.2,
"disabled": true
},
{
"parameters": {
"formTitle": "test",
"formFields": {
"values": [
{
"fieldLabel": "test",
"placeholder": "aaaa",
"defaultValue": "test",
"requiredField": true
}
]
},
"responseMode": "lastNode",
"options": {
"appendAttribution": false,
"buttonLabel": "GO "
}
},
"id": "d7998250-8903-4318-a44e-2bc4ec3fae38",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
64,
320
],
"webhookId": "b1244062-414d-4635-94bb-3999d8ba7287",
"typeVersion": 2.2
},
{
"parameters": {
"operation": "completion",
"completionTitle": "={{ $json.title }}",
"completionMessage": "={{ $json.conteudo }}",
"options": {}
},
"type": "n8n-nodes-base.form",
"typeVersion": 2.5,
"position": [
1136,
320
],
"id": "40f53bbb-dda0-4ab6-a47b-e656b9ce4ed0",
"name": "Form",
"webhookId": "ac0921e8-ef8d-4d19-bbf5-601072cd36d6"
}
],
"connections": {
"Edit Fields3": {
"main": [
[
{
"node": "Filter1",
"type": "main",
"index": 0
}
]
]
},
"Limit": {
"main": [
[
{
"node": "Form",
"type": "main",
"index": 0
}
]
]
},
"My RSS 01": {
"main": [
[
{
"node": "Edit Fields3",
"type": "main",
"index": 0
}
]
]
},
"Filter1": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "My RSS 01",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "d3bbdc95153e6946dbacaffe72cbd2c695d3923240e6e037f8990bdb0f62c236"
}
}
Share the output returned by the last node
This is my docker compose yml for deploying n8n, n8n-runner, postgres, redis and nginx.
services:
postgres:
image: postgres:16-alpine
container_name: n8n-postgres
hostname: n8n-postgres-host
restart: unless-stopped
env_file:
- .env
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
volumes:
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
- db-postgres-volume:/var/lib/postgresql/data
- db-postgres-backup-volume:/var/backups
healthcheck:
test: [ 'CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}' ]
interval: 10s
timeout: 5s
retries: 5
ports:
- 5432:5432
networks:
- n8n-network
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
container_name: n8n-n8n
restart: unless-stopped
environment:
- N8N_HOST=n8n.mydomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=n8n-postgres-host
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
- EXECUTIONS_PROCESS=main
- N8N_RUNNERS_ENABLED=true
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
- N8N_NATIVE_PYTHON_RUNNER=true
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- WEBHOOK_URL=https://n8n.mydomain.com/
- N8N_PROXY_HOPS=1
- NODES_EXCLUDE='["n8n-nodes-base.executeCommand","n8n-nodes-base.ssh"]'
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_SAVE_SUCCESSFUL=true
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=n8n-redis-host
- N8N_EXECUTIONS_CACHE_ENABLED=true
- N8N_SCHEDULER_ENABLED=true
# Security audit list
- N8N_LOG_LEVEL=debug
- N8N_LOG_FILE_SIZE_MAX=50
- N8N_LOG_FILE_COUNT_MAX=10
# Durable scheduler
- N8N_COMMUNITY_PACKAGES_ENABLED=true
- N8N_USE_WORKFLOW_PUBLICATION_SERVICE=true
#- NODE_FUNCTION_ALLOW_EXTERNAL=ioredis
#- NODE_FUNCTION_ALLOW_BUILTIN="*"
ports:
- 5678:5678
links:
- postgres
volumes:
- n8n-storage-volume:/home/node/.n8n
- n8n-file-volume:/files
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:5678/healthz"]
interval: 30s
timeout: 10s
retries: 3
networks:
- n8n-network
- shared-network
redis:
image: redis:7-alpine
container_name: n8n-redis
hostname: n8n-redis-host
restart: unless-stopped
volumes:
- redis-data-volume:/data
networks:
- n8n-network
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
container_name: n8n-n8n-runner
restart: unless-stopped
ports:
- 5680:5680
environment:
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n-n8n:5679
- N8N_RUNNERS_AUTO_SHUTDOWN_TIMEOUT=20
- N8N_RUNNERS_LAUNCHER_LOG_LEVEL=debug
depends_on:
- n8n
networks:
- n8n-network
Nginx reverse proxy configuration
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
#listen 80;
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name n8n.mydomain.com;
ssl_certificate /var/server-auth/n8n.mydomain.com.crt;
ssl_certificate_key /var/server-auth/n8n.mydomain.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# access_log /var/log/nginx/n8n.mydomain.com_access.log;
error_log /var/log/nginx/n8n.mydomain.com_error.log;
# letsencrypt file verify
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}
client_max_body_size 50m;
client_body_timeout 60s;
# Security Header for n8n
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
#add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' wss://n8n.mydomain.com; frame-ancestors 'none'" always;
location / {
proxy_pass http://n8n-n8n:5678/;
proxy_http_version 1.1;
# Preserve headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# For n8n Webhook SSL
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Original-Host $host;
# (Optional) origin passthrough if your app needs it
proxy_set_header Origin $http_origin;
# WebSocket (n8n Editor)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
# Disable buffering/caching for streaming/WS
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
}
}
Information on your n8n setup
- n8n version: 2.30.7
- Database (default: SQLite): postgres:16-alpine
- n8n EXECUTIONS_PROCESS setting (default: own, main): main
- Running n8n via (Docker, npm, n8n cloud, desktop app): Docker Compose
- Operating system: Ubuntu 24.04 LTS 64bit


