Pages

Powered by Blogger.

Kiểm tra lỗi CloudFlare

 

1. Kiểm tra container cloudflared / web app có đang chạy không

Bash
docker ps                  # Xem container nào đang chạy
docker ps -a               # Xem tất cả, kể cả stopped/exited

Nếu container cloudflared hoặc container web (nginx, node, php-fpm…) bị exited → lỗi 502 gần như chắc chắn từ đó.

2. Xem log của cloudflared (quan trọng nhất)

Bash
# Nếu dùng docker run
docker logs <tên_container_hoặc_ID_cloudflared> --tail 100

# Nếu dùng docker-compose
docker-compose logs -f cloudflared

Các lỗi thường gặp trong log cloudflared:

  • level=error msg="Unable to reach the origin service" → Cloudflare không kết nối được tới container backend
  • connection with proxy lost, dial tcp 172.x.x.x:port: connection refused → Backend từ chối kết nối
  • HTTP status 502 hoặc 502 trong log → Backend trả về lỗi

3. Kiểm tra container backend có listen đúng port & IP không

Nhiều người để app chỉ bind 127.0.0.1 → cloudflared trong container khác không kết nối được.

Bash
# Vào container backend kiểm tra
docker exec -it <tên_container_backend> bash

# Ví dụ với Nginx
netstat -tlnp | grep :80
# hoặc
ss -tlnp | grep :80

Phải thấy:

text
LISTEN 0.0.0.0:80   hoặc   :::80

Nếu chỉ thấy 127.0.0.1:80 → sửa lại config để listen 0.0.0.0

4. Kiểm tra kết nối từ container cloudflared tới backend

Bash
# Vào container cloudflared
docker exec -it <cloudflared_container> sh

# Thử curl tới backend (thay bằng địa chỉ thực tế trong docker network)
curl -v http://172.18.0.x:80
curl -v http://backend-container-name:8000
curl -v http://host.docker.internal:8080   # nếu dùng host network

Nếu curl bị timeout hoặc connection refused → lỗi mạng Docker.

5. Kiểm tra Docker network

Bash
docker network ls
docker network inspect <tên_network>

Khuyến nghị:

  • Cả cloudflared và backend cùng nằm trên một network user-defined
  • Không dùng network mode: host cho cloudflared (dễ lỗi với Cloudflare Warp)

Ví dụ docker-compose tốt:

YAML
services:
  cloudflared:
    image: cloudflare/cloudflared
    networks:
      - mynet
    command: tunnel --no-autoupdate run
    environment:
      - TUNNEL_TOKEN=xxx

  web:
    image: nginx:latest
    networks:
      - mynet
    ports:
      - "8080:80"  # không cần expose ra host nếu chỉ cloudflared truy cập

networks:
  mynet:
    driver: bridge

6. Các nguyên nhân phổ biến & cách fix nhanh

Nguyên nhânCách fix nhanh
Backend chỉ listen 127.0.0.1Sửa config listen 0.0.0.0
Docker network khác nhauĐưa chung vào 1 network
Backend port sai trong tunnel configKiểm tra file config.yml hoặc --url
cloudflared restart liên tụcXem log → thường do token sai hoặc origin unreachable
Dùng network_mode: host cho cloudflaredĐổi sang bridge + dùng host.docker.internal hoặc internal IP
CPU/RAM hết → container bị killdocker stats → tăng RAM/CPU

7. Lệnh tổng hợp nhanh để debug (copy-paste)

Bash
echo "=== Container status ===" && docker ps -a --filter "name=cloudflare"
echo "=== Cloudflared log last 50 lines ===" && docker logs --tail 50 $(docker ps -q --filter "name=cloudflare") 2>/dev/null
echo "=== Backend listening on? ===" && docker exec <backend_container> ss -tlnp
echo "=== Test connection from cloudflared ===" && docker exec $(docker ps -q --filter "name=cloudflare") curl -m 5 -v http://<backend>:port

Chạy 4 lệnh trên là 90% biết ngay lỗi nằm ở đâu.

0 comments:

Post a Comment