Cấu hình proxy bằng biến môi trường cho dòng lệnh và công cụ xây dựng
1 tháng 11, 2026
Khi phát triển hoặc vận hành hệ thống, không phải lúc nào bạn cũng muốn cấu hình proxy riêng cho từng ứng dụng. Với nhiều công cụ dòng lệnh và trình xây dựng, cách đơn giản nhất là dùng biến môi trường. Bài viết này tập trung vào cách thiết lập HTTP_PROXY, HTTPS_PROXY và NO_PROXY, lý do tại sao chúng hoạt động, và cách kiểm tra xem lưu lượng đã đi qua proxy hay chưa.
Biến môi trường proxy là gì và tại sao nên dùng
Hầu hết các công cụ dòng lệnh như cURL, wget, Git, npm, pip và thậm chí một số thư viện HTTP trong Node.js hay Python đều tìm biến môi trường proxy trước khi kết nối. Ba biến phổ biến nhất là:
- HTTP_PROXY: proxy cho lưu lượng HTTP.
- HTTPS_PROXY: proxy cho lưu lượng HTTPS.
- NO_PROXY: danh sách tên miền hoặc địa chỉ IP không được gửi qua proxy, kết nối trực tiếp.
Việc dùng biến môi trường có lợi vì bạn không cần sửa mã nguồn hay cài đặt plugin cho từng công cụ. Một cấu hình duy nhất có thể áp dụng cho toàn bộ phiên làm việc terminal, phù hợp khi bạn muốn kiểm tra API từ một địa điểm khác, truy cập tài nguyên bị giới hạn theo khu vực, hoặc tránh bị giới hạn tốc độ trên IP máy local.
Lưu ý quan trọng: biến môi trường chỉ ảnh hưởng đến các tiến trình bắt đầu sau khi bạn thiết lập nó. Nếu đã mở trình duyệt hoặc IDE, bạn cần khởi động lại để chúng nhận biến mới.
Cấu hình biến môi trường cho proxy
Mỗi session trên RoProxy có tên người dùng và mật khẩu riêng, kết nối qua cổng HTTP của gateway. Cổng này dùng cho cả HTTP và HTTPS. Để các công cụ dòng lệnh đi qua session đó, hãy xuất các biến sau trong terminal:
export http_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
export https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
USERNAME và PASSWORD là thông tin đăng nhập của session bạn đã tạo, còn GATEWAY_HOST và HTTP_PORT là địa chỉ gateway và cổng HTTP của session. Nếu bạn dùng shell Zsh hoặc Bash, hãy thêm hai dòng này vào ~/.bashrc hoặc ~/.zshrc để cấu hình có hiệu lực mỗi lần mở terminal mới.
Khi đã xuất biến, bạn không cần thêm cờ -x mỗi lần gọi cURL. Tuy nhiên, nếu muốn ghi đè cho một lệnh cụ thể, cURL vẫn cho phép:
curl -x http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT https://api.ipify.org?format=json
Kiểm tra proxy đã hoạt động chưa
Trước khi chạy công việc thực tế, hãy xác nhận địa chỉ IP công khai thay đổi khi đi qua proxy. Lệnh sau yêu cầu dịch vụ ipify trả về IP ở định dạng JSON:
curl https://api.ipify.org?format=json
Chạy lần đầu mà không thiết lập proxy để ghi lại IP của máy local. Sau đó xuất biến môi trường và chạy lại. Nếu IP trả về khác, lưu lượng đang đi qua gateway proxy.
Bạn cũng có thể dùng cURL với tùy chọn -v để xem chi tiết kết nối:
curl -v https://httpbin.org/ip
Trong đầu ra, hãy tìm các dòng như Via hoặc Proxy-Connection để xác nhận yêu cầu đi qua trung gian thay vì kết nối trực tiếp.
Nếu muốn kiểm tra lập trình theo định kỳ, hãy viết một script nhỏ gọi https://api.ipify.org?format=json mỗi hai phút và lưu kết quả vào file. Khi địa chỉ IP thay đổi theo kỳ hạn bạn đã đặt, điều đó chứng minh chế độ xoay thời gian đang hoạt động đúng.
Ví dụ thực tế với các công cụ phổ biến
cURL và wget
cURL đọc http_proxy và https_proxy tự động. Sau khi xuất biến, mọi lệnh curl đến trang web sẽ đi qua proxy:
curl https://example.com
wget cũng hỗ trợ cùng biến môi trường. Nếu cần tắt proxy cho một lệnh, dùng:
curl --noproxy '*' https://localhost:3000
Git
Git đọc biến môi trường hoặc cấu hình riêng. Để clone qua proxy:
export http_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
export https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
git clone https://github.com/congty/kho-luu-tru.git
Hoặc cấu hình vĩnh viễn cho Git:
git config --global http.proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
git config --global https.proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
npm và pip
npm đọc biến môi trường hoặc cài đặt của riêng nó. Cách nhanh nhất là xuất biến trước khi cài đặt gói:
export https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT
npm install
pip cũng nhận biến môi trường. Nếu chỉ muốn áp dụng cho một lệnh:
pip install --proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT ten-thu-vien
Node.js
Nhiều thư viện HTTP phổ biến trong Node.js (ví dụ Axios, Got, node-fetch) đọc biến môi trường proxy tự nhiên. Bạn không cần thêm cấu hình phức tạp. Ví dụ với Axios:
import axios from 'axios';
async function layIp() {
const res = await axios.get('https://api.ipify.org?format=json');
console.log(res.data);
}
layIp();
Khi chạy script này trong terminal đã xuất https_proxy, Axios sẽ gửi yêu cầu qua gateway proxy. Nếu thư viện bạn dùng không đọc biến môi trường, hãy xem tài liệu của nó để cấu hình proxyAgent, thường dùng cùng gói mở nguồn như https-proxy-agent.
Python
Thư viện requests trong Python cũng đọc biến môi trường proxy. Ví dụ:
import requests
resp = requests.get('https://httpbin.org/ip')
print(resp.json())
Nếu muốn kiểm soát rõ ràng hơn, bạn có thể truyền từ điển proxies:
proxies = {
'http': 'http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT',
'https': 'http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT',
}
resp = requests.get('https://api.ipify.org?format=json', proxies=proxies)
Khi nào nên dùng NO_PROXY
Không phải mọi lưu lượng đều cần đi qua proxy. Các địa chỉ sau thường nên kết nối trực tiếp:
- localhost và 127.0.0.1
- Các máy chủ nội bộ trong mạng công ty
- Endpoint của dịch vụ đám mây trong cùng VPC
Thiết lập biến NO_PROXY với danh sách cách bằng dấu phẩy:
export NO_PROXY=localhost,127.0.0.1,.internal,.mycompany.com,10.0.0.0/8
Một số công cụ không hiểu ký tự đại diện (*) trong NO_PROXY, vì vậy hãy liệt kê rõ từng miền hoặc dải IP cần thiết.
Gỡ lỗi các sự cố phổ biến
Lỗi 407 Proxy Authentication Required
Mã này có nghĩa là proxy yêu cầu xác thực nhưng bạn chưa cung cấp tên người dùng hoặc mật khẩu đúng. Kiểm tra lại USERNAME và PASSWORD trong chuỗi kết nối. Nếu bạn vừa thay đổi mật khẩu session, hãy cập nhật biến môi trường và khởi động lại terminal.
Lỗi 502 Bad Gateway hoặc 504 Gateway Timeout
Lỗi này thường xảy ra khi cURL hoặc ứng dụng không thể kết nối đến GATEWAY_HOST:HTTP_PORT. Hãy kiểm tra:
- Máy bạn có kết nối internet không.
- GATEWAY_HOST và HTTP_PORT có chính xác không.
- Tường lửa hay phần mềm bảo mật có chặn cổng này không.
Lỗi phân giải DNS
Nếu thấy thông báo Could not resolve host, proxy có thể không thể phân giải tên miền mà bạn yêu cầu. Thử truy cập bằng địa chỉ IP trực tiếp hoặc kiểm tra xem DNS của mạng local có bị gián đoạn không.
Lỗi TLS/SSL
Khi đi qua proxy, kết nối HTTPS vẫn được mã hóa từ cuối đến cuối nếu proxy hỗ trợ tunneling (CONNECT). Nếu bạn gặp lỗi chứng chỉ tự ký trong môi trường kiểm tra, cURL cho phép bỏ qua xác thực chứng chỉ bằng -k, nhưng không nên dùng trong sản xuất.
Kết luận
Biến môi trường là cách nhanh và đồng nhất để đưa cURL, Git, npm, pip, Node.js và Python qua proxy mà không phải sửa mã cho từng công cụ. Hãy luôn kiểm tra IP thoát sau khi cấu hình, dùng NO_PROXY cho lưu lượng nội bộ, và lưu biến vào tệp cấu hình shell để không nhập lại mỗi lần. Nếu bạn dùng RoProxy, hãy lưu lại thông tin session của mình trong một nơi an toàn và cập nhật biến môi trường khi thông tin đăng nhập thay đổi.