Biến môi trường http_proxy, https_proxy và no_proxy: cấu hình trên Linux, Windows, Docker

Cập nhật:

Biến môi trường HTTP_PROXY, HTTPS_PROXY và NO_PROXY cho các công cụ dòng lệnh và thư viện lập trình biết phải đi qua proxy nào và bỏ qua proxy cho địa chỉ nào. Cú pháp chuẩn là http://user:pass@ip:port cho cả hai biến proxy, kể cả HTTPS_PROXY, còn NO_PROXY là danh sách tên miền hoặc địa chỉ ngăn cách bằng dấu phẩy. Nên đặt cả bản chữ hoa lẫn chữ thường, vì mỗi công cụ đọc một kiểu. Bài này hướng dẫn đặt tạm thời và cố định trên Linux, Windows, Docker, kèm những trường hợp biến môi trường không có tác dụng và cách kiểm tra.

Proxy HTTP/HTTPS dùng ngay trên server

Ba biến và ý nghĩa

Lỗi phổ biến nhất là viết HTTPS_PROXY=https://.... Scheme trong giá trị mô tả cách kết nối tới chính proxy, không phải tới website. Proxy HTTP/HTTPS thông thường nhận kết nối dạng http://, nên giá trị của cả hai biến đều bắt đầu bằng http://. Proxy của VinaProxy được giao ở dạng ip:port:user:pass; đổi sang URL bằng công cụ chuyển định dạng proxy nếu cần.

BiếnGiá trị ví dụTác dụng
HTTP_PROXY / http_proxyhttp://user:pass@ip:portProxy cho request tới địa chỉ http://
HTTPS_PROXY / https_proxyhttp://user:pass@ip:portProxy cho request tới địa chỉ https://; công cụ mở đường hầm CONNECT qua proxy HTTP
NO_PROXY / no_proxylocalhost,127.0.0.1,.noibo.localDanh sách địa chỉ đi thẳng, không qua proxy

Chữ hoa hay chữ thường

Không có chuẩn chung, mỗi công cụ tự quyết. Ví dụ curl chỉ đọc http_proxy chữ thường cho request HTTP (vì lý do bảo mật), nhưng đọc HTTPS_PROXY ở cả hai dạng. Python requests đọc cả hai. Nhiều công cụ khác ưu tiên một dạng và bỏ qua dạng còn lại. Cách an toàn là đặt cả hai dạng với cùng giá trị.

Nếu mật khẩu có ký tự đặc biệt như @, :, # hoặc %, phải mã hoá URL (ví dụ @ thành %40), nếu không công cụ sẽ cắt sai chuỗi và bạn nhận lỗi 407 Proxy Authentication Required.

Linux và macOS

  • Tạm thời, chỉ trong cửa sổ terminal hiện tại: export http_proxy=http://user:pass@ip:port rồi export https_proxy=$http_proxy, export HTTP_PROXY=$http_proxy, export HTTPS_PROXY=$http_proxy.
  • Bỏ qua proxy cho địa chỉ nội bộ: export no_proxy=localhost,127.0.0.1,.noibo.local và export NO_PROXY=$no_proxy.
  • Cố định cho tài khoản của bạn: thêm các dòng export trên vào ~/.bashrc hoặc ~/.zshrc, rồi mở terminal mới.
  • Cố định cho toàn hệ thống trên Ubuntu: thêm dòng http_proxy=http://user:pass@ip:port (không có chữ export) vào /etc/environment, đăng xuất rồi đăng nhập lại. Chi tiết ở hướng dẫn cài proxy trên Ubuntu.
  • sudo mặc định xoá phần lớn biến môi trường. Dùng sudo -E lenh hoặc cấu hình env_keep nếu lệnh chạy bằng sudo cũng cần proxy.
  • apt không đọc biến môi trường khi chạy qua sudo một cách tin cậy; tạo file /etc/apt/apt.conf.d/95proxy chứa Acquire::http::Proxy "http://user:pass@ip:port/"; và dòng tương tự cho Acquire::https::Proxy.
  • Tắt: unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY và xoá các dòng đã thêm vào file cấu hình.

Windows

  • CMD, tạm thời cho cửa sổ hiện tại: set HTTP_PROXY=http://user:pass@ip:port và set HTTPS_PROXY=http://user:pass@ip:port.
  • PowerShell, tạm thời: $env:HTTP_PROXY = 'http://user:pass@ip:port' và $env:HTTPS_PROXY = 'http://user:pass@ip:port'.
  • Cố định cho người dùng: setx HTTP_PROXY http://user:pass@ip:port và setx HTTPS_PROXY http://user:pass@ip:port. Biến chỉ có hiệu lực ở cửa sổ và ứng dụng mở sau đó.
  • Có thể sửa qua giao diện: System Properties, Environment Variables, thêm biến ở phần User variables.
  • Lưu ý quan trọng: biến môi trường khác với cài đặt proxy hệ thống của Windows. Trình duyệt và nhiều ứng dụng giao diện dùng cài đặt hệ thống, còn curl, git, pip, Python đọc biến môi trường. Cài đặt hệ thống được hướng dẫn ở cài proxy trên Windows.

Docker: ba chỗ khác nhau

Với Docker, proxy có thể cần ở ba nơi, và đặt sai chỗ là lý do phổ biến khiến "đã đặt proxy mà vẫn không chạy".

  • Docker daemon kéo image: daemon không đọc biến trong terminal của bạn. Tạo file /etc/systemd/system/docker.service.d/http-proxy.conf với mục [Service] và dòng Environment="HTTP_PROXY=http://user:pass@ip:port" "HTTPS_PROXY=http://user:pass@ip:port" "NO_PROXY=localhost,127.0.0.1", rồi chạy sudo systemctl daemon-reload và sudo systemctl restart docker.
  • Container và lúc build: thêm khối proxies vào ~/.docker/config.json với các khoá httpProxy, httpsProxy, noProxy; Docker CLI sẽ tự truyền biến vào container mới và vào quá trình build.
  • Truyền tay cho từng lệnh: docker run -e HTTPS_PROXY=http://user:pass@ip:port image hoặc docker build --build-arg HTTPS_PROXY=http://user:pass@ip:port ..
  • Trong container, localhost là chính container. Nếu proxy chạy trên máy chủ, đừng dùng 127.0.0.1 trong giá trị proxy. Hướng dẫn đầy đủ ở cài proxy cho Docker.

NO_PROXY viết thế nào cho đúng

  • Ngăn cách bằng dấu phẩy, không có khoảng trắng: localhost,127.0.0.1,.noibo.local,api.congty.vn.
  • Tên miền bắt đầu bằng dấu chấm như .noibo.local thường khớp mọi tên miền con; nhiều công cụ cũng hiểu noibo.local theo cách tương tự.
  • Hỗ trợ dải địa chỉ dạng CIDR như 10.0.0.0/8 khác nhau giữa các công cụ; có công cụ hiểu, có công cụ không. Nếu cần chắc chắn, liệt kê từng địa chỉ hoặc dùng tên miền.
  • Luôn thêm localhost và 127.0.0.1 để các dịch vụ chạy trên máy không đi vòng qua proxy.
  • Đưa các dịch vụ nội bộ, kho package riêng, máy chủ cơ sở dữ liệu vào NO_PROXY để tránh lỗi kết nối khó hiểu.

Kiểm tra, xử lý lỗi và bảo mật

  • Xem biến đang đặt: env | grep -i proxy trên Linux, Get-ChildItem Env: | Where-Object Name -like '*proxy*' trong PowerShell.
  • Kiểm tra IP đi ra: curl -s https://httpbin.org/ip và so với IP proxy, hoặc mở trang kiểm tra IP của tôi từ máy đó. Thêm -v để xem curl có thực sự kết nối qua proxy. Xem thêm hướng dẫn dùng proxy với curl.
  • Không phải chương trình nào cũng đọc biến môi trường. Một số thư viện Node.js hay ứng dụng tự quản lý mạng cần cấu hình proxy riêng, ví dụ cấu hình proxy cho Node.js axios.
  • Biến môi trường chứa mật khẩu proxy có thể bị lộ qua lịch sử shell, log hay danh sách tiến trình. Đừng commit file cấu hình chứa mật khẩu lên Git; nếu lỡ lộ, đổi mật khẩu proxy trên dashboard.
  • Muốn bỏ proxy hoàn toàn trên máy, xem hướng dẫn tắt proxy.

Câu hỏi thường gặp

HTTPS_PROXY nên bắt đầu bằng http:// hay https://?

Gần như luôn là http://. Scheme mô tả cách kết nối tới proxy, và proxy HTTP/HTTPS thông thường nhận kết nối HTTP rồi mở đường hầm cho trang HTTPS.

Vì sao đã đặt HTTP_PROXY mà curl vẫn không đi qua proxy?

curl chỉ đọc http_proxy chữ thường cho request HTTP. Hãy đặt cả bản chữ thường, hoặc truyền trực tiếp bằng tuỳ chọn -x.

Đặt biến môi trường có làm trình duyệt đi qua proxy không?

Thường là không trên Windows và macOS, vì trình duyệt dùng cài đặt proxy hệ thống. Biến môi trường chủ yếu tác động tới công cụ dòng lệnh và thư viện lập trình.

Docker pull vẫn lỗi dù đã export biến proxy?

Docker daemon chạy như một dịch vụ riêng và không đọc biến trong terminal. Cấu hình proxy cho dịch vụ docker qua systemd rồi khởi động lại.

Proxy có dùng được với ALL_PROXY kiểu SOCKS không?

Proxy của VinaProxy là HTTP/HTTPS với xác thực user và mật khẩu. Hãy dùng HTTP_PROXY và HTTPS_PROXY như trong bài.

Proxy HTTP/HTTPS dùng ngay trên server

IPv4 riêng ở 7 nước và ISP tĩnh ở Việt Nam, Mỹ. Xác thực user và mật khẩu, định dạng ip:port:user:pass, không giới hạn băng thông.

Xem bảng giá

Bài viết liên quan

Cài đặt proxy
Cách cấu hình proxy HTTP(S) cho Docker Container và Docker Compose
Hướng dẫn truyền biến môi trường HTTP_PROXY, HTTPS_PROXY và NO_PROXY vào Docker Container, Dockerfile, Docker Compose và Docker Daemon, kèm cấu hình mẫu.
Cài đặt proxy
Hướng dẫn cấu hình Proxy trên Ubuntu & Debian Linux
Hướng dẫn cấu hình proxy HTTP(S) VinaProxy trên Ubuntu Server và Desktop cho biến môi trường Shell, trình quản lý gói APT và dịch vụ systemd.
Cài đặt proxy
Cách sử dụng proxy HTTP(S) với câu lệnh cURL trên Terminal
Hướng dẫn cú pháp lệnh curl -x http://user:pass@ip:port và cờ -U trên Linux, macOS, Windows để kiểm tra proxy, xem HTTP header và đo ping. Có lệnh mẫu.
Cài đặt proxy
Hướng dẫn cấu hình Proxy trên Windows 10 & Windows 11
Hướng dẫn cấu hình proxy HTTP(S) VinaProxy trên Windows 10 và Windows 11 qua System Settings, Credential Manager và PowerShell. Xem từng bước chi tiết.
Sản phẩm
Proxy tĩnh (IP tĩnh dân cư ISP) Việt Nam & Mỹ
Mua proxy tĩnh ISP dân cư tại Mỹ và Việt Nam: IP đăng ký nhà mạng dân dụng, mỗi IP chỉ một khách dùng, băng thông không giới hạn. Xem giá và mua ngay.
Sản phẩm
Proxy IPv4 datacenter riêng
Mua, thuê proxy IPv4 datacenter riêng tại Mỹ, Việt Nam, Nhật Bản, Hàn Quốc, Singapore, Anh, Hồng Kông. HTTP(S), băng thông không giới hạn, kích hoạt tự động.
ISP · vietnam
Proxy ISP tĩnh Việt Nam: IP mạng gia đình cho các tài khoản giá trị nhất của bạn
Proxy dân cư tĩnh Việt Nam (ISP tĩnh): proxy IP tĩnh từ nhà mạng dân cư cho shop Shopee chính, TikTok Shop, tài khoản quảng cáo Facebook và Zalo OA.
IPV4 · united states
Proxy IPv4 riêng Mỹ: IP datacenter Hoa Kỳ nhanh, dùng riêng và ổn định
Thuê proxy IPv4 Mỹ dùng riêng cho cào dữ liệu, theo dõi thứ hạng, duyệt quảng cáo và nghiên cứu Amazon. IP tĩnh, 1 người 1 IP, băng thông không giới hạn.