Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "HI.AI Members" các nội dung bạn quan tâm.

Bài 6. Không gọi được API từ máy khác trong mạng LAN

1. Đặt vấn đề

Khi triển khai AI local, nhiều trường hợp Ollama hoặc API chạy tốt trên máy chủ nhưng máy khác trong LAN không gọi được. Ví dụ, trên server chạy curl 127.0.0.1 được, nhưng từ máy Drupal, QMS hoặc máy người dùng lại không truy cập được. Đây là lỗi phổ biến liên quan đến binding địa chỉ, firewall, port, reverse proxy, cấu hình network hoặc chính sách bảo mật.

Cần phân biệt rõ: không gọi được Ollama trực tiếp chưa chắc là lỗi, vì về nguyên tắc Ollama không nên mở trực tiếp cho LAN hoặc Internet. Ứng dụng khác nên gọi API trung gian hoặc Nginx reverse proxy.

2. Dấu hiệu nhận biết

  • Gọi API trên server được, từ máy khác không được.
  • Trình duyệt báo connection refused hoặc timeout.
  • curl http://server-ai:port không trả về.
  • Website tích hợp AI báo lỗi kết nối.
  • Nginx báo upstream error.
  • API chỉ listen trên 127.0.0.1.
  • Firewall chặn port.

3. Kiểm tra API đang listen ở đâu

Trên server AI:

 
ss -lntp
 

Tìm port liên quan, ví dụ:

 
ss -lntp | grep 8000
ss -lntp | grep 11434
 

Nếu service chỉ listen 127.0.0.1, máy khác không gọi được. Nếu cần cho LAN gọi API trung gian, service phải listen 0.0.0.0 hoặc IP LAN, hoặc đi qua Nginx.

4. Kiểm tra từ máy khác

Từ máy khác trong LAN:

 
ping <ip-server-ai>
curl http://<ip-server-ai>:<port>/health
 

Nếu ping không được, kiểm tra network. Nếu ping được nhưng curl không được, kiểm tra port/firewall/service.

5. Kiểm tra firewall

Trên Ubuntu có thể dùng:

 
sudo ufw status
 

Nếu dùng iptables/nftables, kiểm tra tương ứng. Cần mở port API trung gian nếu có chủ đích. Không nên mở cổng Ollama trực tiếp nếu không cần.

6. Kiểm tra Nginx reverse proxy

Nếu dùng Nginx, kiểm tra:

 
sudo nginx -t
sudo systemctl status nginx
 

Log:

 
tail -n 100 /var/log/nginx/error.log
 

Cần xem upstream có đúng IP/port không, API backend có chạy không, timeout có phù hợp không.

7. Phân biệt API trung gian và Ollama

Mô hình đúng:

 
Máy khác trong LAN → Nginx/API trung gian → Ollama localhost
 

Không nên:

 
Máy khác trong LAN → Ollama 11434 trực tiếp
 

Nếu cần test Ollama từ server, dùng localhost. Nếu cần tích hợp từ Drupal/QMS, hãy tạo API trung gian.

8. Kiểm tra hostname/DNS nội bộ

Nếu gọi bằng tên máy, cần kiểm tra:

 
getent hosts ten-server
 

Nếu DNS không phân giải, dùng IP hoặc cấu hình DNS/hosts nội bộ.

9. Nguyên nhân thường gặp

  • Service chỉ bind localhost.
  • Firewall chặn port.
  • Sai IP server.
  • Sai port.
  • Nginx cấu hình sai upstream.
  • API chưa chạy.
  • Docker không expose port.
  • DNS nội bộ lỗi.
  • Máy khác không cùng VLAN/subnet.
  • Proxy nội bộ chặn.
  • TLS/certificate lỗi nếu dùng HTTPS.

10. Cách xử lý an toàn

  • Chỉ mở port API trung gian cần thiết.
  • Dùng Nginx reverse proxy.
  • Bật xác thực.
  • Giới hạn IP nếu cần.
  • Không expose Ollama.
  • Có endpoint /health để kiểm tra.
  • Ghi log request.
  • Kiểm tra từ máy Drupal/QMS thực tế.

11. Kết luận

Không gọi được API từ máy khác trong LAN thường do binding, firewall, Nginx, Docker hoặc DNS. Cần kiểm tra theo thứ tự: service listen ở đâu, port có mở không, firewall có chặn không, Nginx có proxy đúng không, máy khác có nhìn thấy server không. Trong bệnh viện, nên để máy khác gọi API trung gian có xác thực, không gọi trực tiếp Ollama.