Tuyệt chiêu cấu hình Git Proxy theo Domain: Vượt Firewall công ty không lo ‘đứt xích’ mạng nội bộ

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Nỗi ám ảnh mang tên “Connection timed out”

Sáng thứ Hai, bạn vừa nhâm nhi cafe vừa định git clone một thư viện hot trend về nghiên cứu. Đùng một cái, màn hình hiện ra dòng chữ đỏ chót: Fatal: Failed to connect to github.com port 443: Timed out. Sau 30 giây chờ đợi trong vô vọng, bạn nhận ra mình lại bị Firewall của công ty “hỏi thăm”.

Lý do đằng sau bức tường lửa này thực ra khá dễ hiểu. Trong các môi trường bảo mật cao như ngân hàng hay tập đoàn lớn, mọi traffic đi ra Internet đều phải đi qua một cổng Proxy trung gian. Nếu bạn không khai báo Proxy, Git sẽ cố gắng kết nối trực tiếp và bị Firewall chặn đứng ngay lập tức.

Tôi từng mất cả buổi sáng vì một lỗi ngớ ngẩn. Sau khi cài proxy để tải code từ GitHub, tôi quên bẵng đi. Lúc cần push code lên GitLab nội bộ, Git lại “hăm hở” đẩy traffic qua proxy công ty. Kết quả là proxy không nhận diện được server nội bộ, và mọi thứ đứng hình.

Tại sao không nên dùng Global Proxy cho Git?

Cách phổ biến nhất trên StackOverflow là dùng lệnh cấu hình global:

git config --global http.proxy http://proxy-server:8080

Lệnh này giải quyết được việc ra Internet, nhưng lại gây rắc rối lớn. Nó áp dụng cấu hình này cho tất cả repository bạn có trên máy.

  • Với GitHub/GitLab.com: Chạy mượt mà.
  • Với GitLab nội bộ (Intranet): Lỗi kết nối vì Proxy không thể phân giải được địa chỉ IP trong mạng LAN.

Việc phải liên tục unset rồi lại set proxy mỗi khi chuyển dự án cực kỳ ức chế. Bạn cần một giải pháp thông minh hơn để Git tự biết khi nào cần dùng “hộ chiếu” Proxy.

Giải pháp 1: Cấu hình Proxy riêng cho từng Domain (Khuyên dùng)

Git cho phép chúng ta chỉ định Proxy dựa trên URL của repository. Đây là cách sạch sẽ nhất để vừa clone code từ GitHub, vừa làm việc mượt mà với server nội bộ công ty.

Cấu hình cho GitHub

Thay vì dùng global chung chung, bạn hãy chỉ định rõ domain https://github.com sẽ đi qua proxy:

git config --global http."https://github.com".proxy http://user:pass@proxy-server:8080

Cấu hình cho GitLab hoặc Bitbucket

Bạn cũng có thể áp dụng tương tự cho các nền tảng khác:

git config --global http."https://gitlab.com".proxy http://proxy-server:3128

Với cách này, Git chỉ dùng Proxy khi bạn thao tác với GitHub. Khi làm việc với server nội bộ (ví dụ: https://git.company.com), Git sẽ kết nối trực tiếp. Mọi thứ diễn ra hoàn toàn tự động.

Giải pháp 2: Vượt rào cho kết nối SSH

Nhiều developer ưu tiên dùng SSH ([email protected]:...) để tránh phải nhập Token thủ công. Tuy nhiên, lưu ý rằng cấu hình http.proxy ở trên hoàn toàn không có tác dụng với giao thức SSH.

Để xử lý, chúng ta cần can thiệp vào file config của SSH tại ~/.ssh/config.

Trên Linux hoặc macOS (Sử dụng nc – netcat)

Mở file ~/.ssh/config và thêm đoạn mã sau:

Host github.com
    HostName github.com
    User git
    # Dùng cho HTTP Proxy
    ProxyCommand nc -X connect -x proxy-server:8080 %h %p

Trên Windows (Sử dụng connect.exe)

Git Bash trên Windows đi kèm công cụ connect.exe rất mạnh mẽ. Cấu hình của bạn sẽ trông như thế này:

Host github.com
    HostName github.com
    User git
    ProxyCommand connect -H proxy-server:8080 %h %p

Nếu proxy yêu cầu đăng nhập, bạn chỉ cần thêm thông tin vào trước địa chỉ server: connect -H user:pass@proxy-server:8080.

Giải pháp 3: Biến môi trường (Dùng cho tình huống khẩn cấp)

Nếu bạn chỉ cần dùng Proxy một lần duy nhất để clone nhanh một dự án, đừng sửa config làm gì. Hãy dùng biến môi trường ngay trong dòng lệnh.

# Linux/macOS
HTTPS_PROXY=http://proxy-server:8080 git clone https://github.com/user/repo.git

# Windows (PowerShell)
$env:HTTPS_PROXY="http://proxy-server:8080"; git clone https://github.com/user/repo.git

Cách này cực kỳ hữu ích khi bạn đang debug trên server tạm thời và không muốn để lại dấu vết cấu hình.

Kinh nghiệm thực chiến: Xử lý Proxy NTLM (Windows Authentication)

Trong môi trường doanh nghiệp dùng NTLM, Git thường báo lỗi 407 (Proxy Authentication Required) dù pass đúng. Git vốn không giỏi xử lý các giao thức xác thực đặc thù của Windows.

Giải pháp tối ưu là cài đặt Cntlm. Công cụ này đóng vai trò là một proxy trung gian chạy tại 127.0.0.1:3128. Nó sẽ lo việc “bắt tay” phức tạp với proxy công ty. Lúc này, bạn chỉ cần trỏ Git về local:

git config --global http.proxy http://127.0.0.1:3128

Cntlm không chỉ giúp ích cho Git mà còn cứu cánh cho cả NPM, Docker và Pip.

Cách kiểm tra và dọn dẹp cấu hình

Khi mang laptop ra quán cafe hoặc về nhà, cấu hình proxy cũ có thể khiến Git bị lỗi. Hãy kiểm tra lại các rule đang chạy bằng lệnh:

git config --global --get-regexp proxy

Nếu muốn xóa bỏ hoàn toàn để về mặc định:

# Xóa proxy cho domain cụ thể
git config --global --unset http."https://github.com".proxy

# Xóa toàn bộ global proxy
git config --global --unset http.proxy

Lời kết

Làm chủ cấu hình Proxy giúp bạn chuyên nghiệp hơn và tiết kiệm hàng giờ đồng hồ vô ích. Lời khuyên của tôi là hãy ưu tiên Giải pháp 1 để tách biệt traffic rõ ràng. Đừng quên lệnh git config --list luôn là người bạn thân thiết mỗi khi gặp sự cố kết nối. Chúc các bạn setup thành công!

Share: