Vấn đề: Header API không được chuyển tiếp qua Nginx proxy
Khi thiết lập Nginx làm proxy cho Chatwoot, các header xác thực đặc biệt như api_access_token
không được chuyển tiếp mặc định. Điều này dẫn đến không thể đăng nhập hoặc thực hiện các thao tác API qua proxy.
Nguyên nhân
Mặc định, Nginx chỉ chuyển tiếp một số header HTTP phổ biến như Authorization
. Tuy nhiên, Chatwoot sử dụng header tùy chỉnh api_access_token
cho xác thực, và Nginx có 2 vấn đề:
- Không chuyển tiếp tự động các header tùy chỉnh
- Mặc định không chấp nhận header có dấu gạch dưới (_) trong tên
Các giải pháp thử nghiệm không thành công
Bạn đã thử các phương pháp sau nhưng chưa thành công:
proxy_set_header api_access_token $http_api_access_token;
proxy_pass_header api_access_token;
Giải pháp hoàn chỉnh
Vấn đề chính nằm ở chỗ Nginx mặc định không chấp nhận header có dấu gạch dưới. Thêm cấu hình sau vào file nginx.conf hoặc trong block http/server:
# Cho phép header có dấu gạch dưới
underscores_in_headers on;
Cấu hình hoàn chỉnh tham khảo
server {
listen 80;
server_name chatwoot.yourdomain.com;
# Cho phép header có dấu gạch dưới - ĐIỂM QUAN TRỌNG
underscores_in_headers on;
location / {
proxy_pass <http://localhost:3000>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Chuyển tiếp header xác thực Chatwoot
proxy_set_header api_access_token $http_api_access_token;
proxy_pass_header api_access_token;
# Các cài đặt khác cho websocket nếu cần
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Lưu ý
- Cài đặt
underscores_in_headers on
có thể đặt ở cấp http, server hoặc location - Sau khi thay đổi cấu hình, nhớ reload Nginx:
sudo nginx -t && sudo systemctl reload nginx
- Kiểm tra logs Nginx nếu vẫn gặp vấn đề:
sudo tail -f /var/log/nginx/error.log
Hy vọng cấu hình này giúp bạn và những người khác giải quyết vấn đề header xác thực khi sử dụng Nginx làm proxy cho Chatwoot!