[{"data":1,"prerenderedAt":19},["ShallowReactive",2],{"blog:post:vi:cau-hinh-proxy-bien-moi-truong-dong-lenh":3},{"slug":4,"lang":5,"title":6,"summary":7,"date":8,"tags":9,"tag_slugs":14,"thumbnail_url":15,"translations":16,"body":17,"asset_base":18},"cau-hinh-proxy-bien-moi-truong-dong-lenh","vi","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","Hướng dẫn cấu hình HTTP_PROXY, HTTPS_PROXY và NO_PROXY để cURL, npm, pip, Git và các công cụ khác gửi lưu lượng qua proxy, cùng cách kiểm tra và sửa lỗi phổ biến.","2026-11-01",[10,11,12,13],"proxy","bien-moi-truong","curl","nodejs",[10,11,12,13],"https://blog-api.ro-proxy.com/api/blog/posts/cau-hinh-proxy-bien-moi-truong-dong-lenh/thumbnail.svg?lang=vi",[5],"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.\n\n## Biến môi trường proxy là gì và tại sao nên dùng\n\nHầ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à:\n\n- HTTP_PROXY: proxy cho lưu lượng HTTP.\n- HTTPS_PROXY: proxy cho lưu lượng HTTPS.\n- 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.\n\nViệ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.\n\nLư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.\n\n## Cấu hình biến môi trường cho proxy\n\nMỗ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:\n\n```sh\nexport http_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\nexport https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\n```\n\nUSERNAME 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.\n\nKhi đã 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:\n\n```sh\ncurl -x http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT https://api.ipify.org?format=json\n```\n\n## Kiểm tra proxy đã hoạt động chưa\n\nTrướ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:\n\n```sh\ncurl https://api.ipify.org?format=json\n```\n\nChạ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.\n\nBạn cũng có thể dùng cURL với tùy chọn -v để xem chi tiết kết nối:\n\n```sh\ncurl -v https://httpbin.org/ip\n```\n\nTrong đầ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\nNế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.\n\n## Ví dụ thực tế với các công cụ phổ biến\n\n### cURL và wget\n\ncURL đọ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:\n\n```sh\ncurl https://example.com\n```\n\nwget 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:\n\n```sh\ncurl --noproxy '*' https://localhost:3000\n```\n\n### Git\n\nGit đọc biến môi trường hoặc cấu hình riêng. Để clone qua proxy:\n\n```sh\nexport http_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\nexport https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\ngit clone https://github.com/congty/kho-luu-tru.git\n```\n\nHoặc cấu hình vĩnh viễn cho Git:\n\n```sh\ngit config --global http.proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\ngit config --global https.proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\n```\n\n### npm và pip\n\nnpm đọ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:\n\n```sh\nexport https_proxy=http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT\nnpm install\n```\n\npip cũng nhận biến môi trường. Nếu chỉ muốn áp dụng cho một lệnh:\n\n```sh\npip install --proxy http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT ten-thu-vien\n```\n\n### Node.js\n\nNhiề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:\n\n```js\nimport axios from 'axios';\n\nasync function layIp() {\n  const res = await axios.get('https://api.ipify.org?format=json');\n  console.log(res.data);\n}\n\nlayIp();\n```\n\nKhi 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.\n\n### Python\n\nThư viện requests trong Python cũng đọc biến môi trường proxy. Ví dụ:\n\n```python\nimport requests\n\nresp = requests.get('https://httpbin.org/ip')\nprint(resp.json())\n```\n\nNếu muốn kiểm soát rõ ràng hơn, bạn có thể truyền từ điển proxies:\n\n```python\nproxies = {\n  'http': 'http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT',\n  'https': 'http://USERNAME:PASSWORD@GATEWAY_HOST:HTTP_PORT',\n}\nresp = requests.get('https://api.ipify.org?format=json', proxies=proxies)\n```\n\n## Khi nào nên dùng NO_PROXY\n\nKhô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:\n\n- localhost và 127.0.0.1\n- Các máy chủ nội bộ trong mạng công ty\n- Endpoint của dịch vụ đám mây trong cùng VPC\n\nThiết lập biến NO_PROXY với danh sách cách bằng dấu phẩy:\n\n```sh\nexport NO_PROXY=localhost,127.0.0.1,.internal,.mycompany.com,10.0.0.0/8\n```\n\nMộ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.\n\n## Gỡ lỗi các sự cố phổ biến\n\n### Lỗi 407 Proxy Authentication Required\n\nMã 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.\n\n### Lỗi 502 Bad Gateway hoặc 504 Gateway Timeout\n\nLỗ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:\n\n1. Máy bạn có kết nối internet không.\n2. GATEWAY_HOST và HTTP_PORT có chính xác không.\n3. Tường lửa hay phần mềm bảo mật có chặn cổng này không.\n\n### Lỗi phân giải DNS\n\nNế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.\n\n### Lỗi TLS/SSL\n\nKhi đ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.\n\n## Kết luận\n\nBiế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.\n","https://blog-api.ro-proxy.com/api/blog/posts/cau-hinh-proxy-bien-moi-truong-dong-lenh/assets",1793518611138]