Bạn vừa cài đặt Ubuntu. Bạn set http_proxy trong terminal, curl google.com hoạt động, nhưng sudo apt update lại thất bại. Chào mừng bạn đến với thế giới cấu hình proxy trên Linux.

Ubuntu (và Linux nói chung) không có một thiết lập proxy toàn hệ thống duy nhất mà tất cả ứng dụng đều tôn trọng. Không giống như Windows hay macOS, nơi bạn có thể set proxy trong tùy chọn hệ thống và hầu hết ứng dụng sẽ sử dụng nó, Ubuntu dựa vào một cách tiếp cận phân mảnh với không có công tắc proxy trung tâm.

Mỗi công cụ hoặc là:

  1. Bỏ qua hoàn toàn các biến môi trường, hoặc
  2. Chỉ sử dụng chúng trong các điều kiện cụ thể, hoặc
  3. Yêu cầu cấu hình riêng biệt của chính nó.

Thiết lập proxy trên Ubuntu thực sự có nghĩa là cấu hình nhiều công cụ một cách độc lập.

Trong hướng dẫn chi tiết này, chúng tôi sẽ đề cập đến apt, curl, wget, git, pip, npm, Docker, Snap và systemd với các ví dụ cấu hình hoạt động.

Bạn sẽ tìm hiểu về các loại proxy khác nhau và chính xác nơi cấu hình từng công cụ, để cuối cùng bạn có thể set nó một lần và mọi thứ đều hoạt động.

Đã kiểm tra trên: Ubuntu 26.04 LTS (Resolute Raccoon)

-sp

Tại Sao Cấu Hình Proxy Trên Ubuntu Linux Lại Phức Tạp

Đây là điều khiến hầu hết người dùng Ubuntu mới ngạc nhiên: không có một thiết lập proxy duy nhất nào hoạt động ở mọi nơi.

Không giống như Windows, Ubuntu không có một công tắc proxy trung tâm. Thay vào đó, mỗi công cụ, như apt, curl, wget, git, pip, npm, Docker, Snap, trình duyệt của bạn và terminal của bạn, đều tự quản lý cấu hình proxy riêng. Vì vậy, khi bạn set proxy trong Cài đặt GNOME, terminal của bạn bỏ qua nó hoàn toàn. Khi bạn set biến môi trường, APT set bỏ qua nó hoàn toàn. Trên hết, sudo loại bỏ các biến môi trường của bạn trước khi chạy lệnh, và các dịch vụ systemd không bao giờ nhìn thấy chúng.

Sự không kết nối này làm nản lòng rất nhiều người vì họ set proxy ở một nơi và sau đó tự hỏi tại sao nó vẫn không hoạt động ở nơi khác.

Trong bài viết toàn diện này, chúng tôi sẽ giải thích chính xác nơi set proxy của bạn cho mọi công cụ chính trên Ubuntu, và tại sao mỗi công cụ lại hoạt động theo cách của nó.

Hãy bắt đầu từ đầu.

Hiểu Về Các Loại Proxy

Trước khi cấu hình bất cứ thứ gì, bạn cần biết loại proxy bạn đang làm việc. Các loại proxy khác nhau hoạt động khác nhau, và chọn sai loại có thể gây ra lỗi kết nối.

Proxy Datacenter

Datacenter proxies đến từ các máy chủ được lưu trữ trong trung tâm dữ liệu. Chúng nhanh và rẻ, nhưng các trang web thường có thể phát hiện và chặn chúng vì địa chỉ IP của chúng trông không giống các kết nối internet gia đình thực sự.

Vì lý do này, chúng hoạt động tốt nhất cho các tác vụ khối lượng lớn, rủi ro thấp (như thu thập dữ liệu công khai, giám sát cơ sở hạ tầng của riêng bạn hoặc kiểm tra tải) nơi tốc độ quan trọng hơn việc không bị phát hiện.

Proxy Dân Cư

Residential proxies sử dụng địa chỉ IP mà các nhà cung cấp dịch vụ internet (ISP) thực sự gán cho các thiết bị gia đình thực tế. Vì lý do này, các trang web coi lưu lượng từ residential proxies giống như lưu lượng từ một người dùng thông thường.

Điều này làm cho chúng rất hữu ích cho việc thu thập dữ liệu web, kiểm tra địa lý và các tác vụ nơi datacenter IP bị chặn.

Proxy HTTP vs HTTPS

Một HTTP proxy xử lý lưu lượng web tiêu chuẩn. Một HTTPS proxy thêm mã hóa vào kết nối giữa thiết bị của bạn và máy chủ proxy, có nghĩa là thông tin đăng nhập và siêu dữ liệu yêu cầu của bạn được bảo vệ khỏi bất kỳ ai theo dõi mạng cục bộ của bạn. Hầu hết các thiết lập proxy hiện đại sử dụng HTTPS, vì vậy hãy luôn kiểm tra giao thức mà nhà cung cấp của bạn hỗ trợ.

Để có giải thích kỹ thuật sâu hơn về cách các HTTP và HTTPS proxy hoạt động ở cấp độ giao thức, bao gồm cách phương thức CONNECT tạo đường hầm và tệp PAC làm gì, MDN Web Docs đề cập kỹ lưỡng.

Proxy SOCKS5

SOCKS5 proxies hoạt động ở cấp độ thấp hơn so với HTTP/HTTPS proxy. Không giống như HTTP proxy chỉ xử lý lưu lượng web, SOCKS5 định tuyến tất cả lưu lượng mạng, bao gồm UDP, FTP và các giao thức không phải HTTP, điều này làm cho nó trở thành lựa chọn linh hoạt và thân thiện với quyền riêng tư hơn. Nhiều công cụ trên Ubuntu hỗ trợ SOCKS5 nguyên bản, bao gồm curl, ssh và hầu hết các ứng dụng torrent.

Bây giờ bạn đã hiểu các loại, hãy đi vào cấu hình thực tế.

Phương pháp 1: Biến Môi Trường

Biến môi trường là thứ gần nhất mà Ubuntu có với một thiết lập proxy phổ quát. Nhiều công cụ dòng lệnh tự động kiểm tra các biến này, vì vậy set chúng luôn là nơi tốt nhất để bắt đầu.

Các Biến Chính

Ubuntu nhận ra các biến môi trường proxy tiêu chuẩn này:

http_proxy      # Proxy for HTTP traffic
https_proxy     # Proxy for HTTPS traffic
ftp_proxy       # Proxy for FTP traffic
no_proxy        # Comma-separated list of hosts to bypass
ALL_PROXY       # Fallback proxy for tools that ignore the others

Luôn sử dụng tên biến chữ thường. Các phiên bản chữ hoa (HTTP_PROXY, HTTPS_PROXY) có một lỗ hổng bảo mật đã biết trong môi trường CGI được gọi là httpoxy (VU#797896).

Một kẻ tấn công có thể gửi một tiêu đề yêu cầu HTTP Proxy: được chế tạo mà máy chủ web CGI thăng cấp lên biến môi trường HTTP_PROXY, sau đó chuyển hướng lưu lượng ra ngoài của ứng dụng của bạn đến máy chủ của kẻ tấn công.

Các biến chữ thường không bị ảnh hưởng bởi cuộc tấn công này vì đặc tả CGI (RFC 3875) chỉ thăng cấp các tiêu đề yêu cầu HTTP lên các biến môi trường chữ hoa. Vì vậy, trong khi cả hai trường hợp đều hoạt động trong hầu hết các tình huống, chữ thường là tiêu chuẩn an toàn hơn và là tiêu chuẩn bạn nên luôn sử dụng.

Cũng lưu ý biến ALL_PROXY, nhiều công cụ bao gồm curl, git và các thư viện Python khác nhau sẽ dự phòng vào ALL_PROXY khi chúng không thể tìm thấy một biến cụ thể theo giao thức. Bao gồm nó làm cho cấu hình của bạn mạnh mẽ hơn với rất ít nỗ lực thêm.

Thiết Lập Biến Cho Phiên Hiện Tại

Nếu bạn muốn kiểm tra proxy của mình một cách nhanh chóng mà không thực hiện các thay đổi vĩnh viễn, hãy chạy các lệnh này trong terminal của bạn:

export http_proxy="http://proxyhost:port"
export https_proxy="http://proxyhost:port"
export ftp_proxy="http://proxyhost:port"
export ALL_PROXY="http://proxyhost:port"
export no_proxy="localhost,127.0.0.1,::1"

Thay thế proxyhost bằng địa chỉ IP hoặc tên máy chủ thực tế của máy chủ proxy của bạn và port bằng số cổng. Các thiết lập này biến mất ngay khi bạn đóng cửa sổ terminal, vì vậy chúng hoàn hảo cho các bài kiểm tra nhanh.

Thiết Lập Biến Vĩnh Viễn Cho Tài Khoản Người Dùng

Để giữ các thiết lập proxy mỗi khi bạn mở terminal, hãy thêm các dòng sau vào tệp ~/.bashrc của bạn:

nano ~/.bashrc

Cuộn xuống cuối và thêm:

# Proxy settings
export http_proxy="http://proxyhost:port"
export https_proxy="http://proxyhost:port"
export ftp_proxy="http://proxyhost:port"
export ALL_PROXY="http://proxyhost:port"
export no_proxy="localhost,127.0.0.1,::1"

Lưu với Ctrl+O, nhấn Enter, sau đó thoát với Ctrl+X. Tải lại ngay lập tức:

source ~/.bashrc

Thiết Lập Biến Toàn Hệ Thống Cho Tất Cả Người Dùng

Nếu bạn cần mọi người dùng trên máy sử dụng cùng một proxy, bạn có hai lựa chọn tốt.

Lựa chọn 1: /etc/environment

Đây là cách tiếp cận đơn giản nhất. Đây là một tệp khóa-giá trị tĩnh mà PAM đọc khi đăng nhập và áp dụng cho mọi người dùng và mọi phiên:

sudo nano /etc/environment

Thêm các dòng này ở cuối. Lưu ý rằng /etc/environment không sử dụng từ khóa export và nó không hỗ trợ mở rộng biến. Bạn không thể tham chiếu $HOME hoặc các biến khác bên trong nó:

http_proxy="http://proxyhost:port"
https_proxy="http://proxyhost:port"
ftp_proxy="http://proxyhost:port"
ALL_PROXY="http://proxyhost:port"
no_proxy="localhost,127.0.0.1,::1"

Lưu và khởi động lại để các thay đổi có hiệu lực cho tất cả người dùng.

Lựa chọn 2: /etc/profile.d/proxy.sh

Đây là lựa chọn tốt hơn khi bạn cần logic động - ví dụ, nếu địa chỉ proxy của bạn phụ thuộc vào một biến môi trường, tra cứu tên máy chủ hoặc một điều kiện. Không giống như /etc/environment, các script shell trong /etc/profile.d/ hỗ trợ cú pháp bash đầy đủ:

sudo nano /etc/profile.d/proxy.sh

Thêm:

#!/bin/bash
# System-wide proxy settings
PROXY_HOST="proxyhost"
PROXY_PORT="port"
export http_proxy="http://${PROXY_HOST}:${PROXY_PORT}"
export https_proxy="http://${PROXY_HOST}:${PROXY_PORT}"
export ftp_proxy="http://${PROXY_HOST}:${PROXY_PORT}"
export ALL_PROXY="http://${PROXY_HOST}:${PROXY_PORT}"
export no_proxy="localhost,127.0.0.1,::1"

Làm cho nó có thể thực thi:

sudo chmod +x /etc/profile.d/proxy.sh

Script này chạy cho mọi shell đăng nhập tương tác trên hệ thống. Đây là cách tiếp cận ưa thích cho các quản trị viên quản lý máy chủ nhiều người dùng.

Lưu ý quan trọng: Mặc dù các biến môi trường hoạt động cho nhiều công cụ CLI, apt, sudo, các dịch vụ systemd và các gói Snap đều bỏ qua chúng. Mỗi cái đó cần cấu hình riêng, mà các phần dưới đây sẽ đề cập chi tiết.

Phương pháp 2: Cấu Hình Proxy APT

APT có hệ thống proxy riêng. Nó không đọc các biến môi trường của bạn. Do đó, ngay cả khi bạn set http_proxy một cách chính xác, APT vẫn sẽ bỏ qua proxy trừ khi bạn cấu hình nó trực tiếp.

Cách Đúng Để Cấu Hình Proxy APT

Tạo một tệp cấu hình proxy chuyên dụng cho APT:

sudo nano /etc/apt/apt.conf.d/proxy.conf

Tệp này không tồn tại theo mặc định, vì vậy bạn đang tạo một tệp mới. Thêm các dòng này:

Acquire::http::Proxy "http://proxyhost:port";
Acquire::https::Proxy "http://proxyhost:port";
Acquire::ftp::Proxy "ftp://proxyhost:port";

Lưu tệp và thoát. Kể từ thời điểm này, mọi lệnh apt sẽ tự động định tuyến qua proxy của bạn. Bạn không cần khởi động lại bất cứ thứ gì.

Kiểm Tra APT Có Sử Dụng Proxy Không

Chạy một bản cập nhật đơn giản để xác nhận proxy đang hoạt động:

sudo apt update

Nếu APT kết nối và tải danh sách gói mà không có lỗi, cấu hình proxy của bạn là chính xác.

Vô Hiệu Hóa Proxy APT Cho Các Máy Chủ Cụ Thể

Đôi khi bạn muốn APT bỏ qua proxy cho một số máy chủ nội bộ:

Acquire::http::Proxy {
"internal.server.local" DIRECT;
};

Điều này yêu cầu APT kết nối trực tiếp với internal.server.local trong khi vẫn định tuyến mọi thứ khác qua proxy.

Xóa Proxy APT

Để ngừng APT sử dụng proxy, hãy xóa tệp cấu hình:

sudo rm /etc/apt/apt.conf.d/proxy.conf

Phương pháp 3: curl

curl là một trong những công cụ dòng lệnh được sử dụng rộng rãi nhất trên Ubuntu. Cấu hình nó để sử dụng proxy rất đơn giản, nhưng hiểu cách nó tìm kiếm các tệp cấu hình sẽ tiết kiệm rất nhiều thời gian gỡ lỗi.

Sử Dụng Proxy Cho Một Lệnh curl Đơn Lẻ

Thêm cờ -x:

curl -x http://proxyhost:port https://example.com

Thiết Lập Proxy Vĩnh Viễn Cho Người Dùng

Lưu các thiết lập proxy của bạn trong tệp cấu hình người dùng của curl:

nano ~/.curlrc

Thêm:

proxy = http://proxyhost:port

Kể từ bây giờ, mọi lệnh curl bạn chạy sẽ tự động sử dụng proxy này. curl tìm kiếm tệp này trong $CURL_HOME/.curlrc, sau đó $XDG_CONFIG_HOME/.curlrc, sau đó ~/.curlrc.

Thiết Lập curl Sử Dụng Proxy Toàn Hệ Thống

curl không có đường dẫn tệp cấu hình toàn hệ thống tiêu chuẩn trên Linux. Cách đáng tin cậy nhất để làm cho curl sử dụng proxy cho tất cả người dùng trên hệ thống là set các biến môi trường trong /etc/profile.d/proxy.sh (đã đề cập trong Phương pháp 1). curl đọc http_proxy và https_proxy tự động ở mức ưu tiên thấp nhất, vì vậy các biến môi trường toàn hệ thống là cách tiếp cận chính xác ở đây.

Nếu bạn cần ghi đè proxy cho một người dùng hoặc script cụ thể, bạn có thể trỏ curl vào bất kỳ tệp cấu hình nào với cờ -K:

curl -K /path/to/curlconfig https://example.com

Ghi Đè Proxy Cho Một Lệnh Đơn Lẻ

curl --noproxy "*" https://internal.server.local

Cân Nhắc Chứng Chỉ SSL

Nếu tổ chức của bạn sử dụng proxy chặn kiểm tra lưu lượng HTTPS, curl sẽ đưa ra lỗi chứng chỉ SSL. Không bao giờ sử dụng -k (chế độ không an toàn) trong sản xuất. Nó vô hiệu hóa tất cả xác minh chứng chỉ. Thay vào đó, hãy cài đặt chứng chỉ CA gốc của tổ chức bạn vào kho tin cậy của Ubuntu. Nó sẽ được đề cập chi tiết trong phần Chứng chỉ CA Doanh nghiệp.

Phương pháp 4: wget

wget có tệp cấu hình riêng và không kế thừa các thiết lập proxy của APT.

Sử Dụng Proxy Cho Một Lệnh wget Đơn Lẻ

wget -e use_proxy=yes -e http_proxy=http://proxyhost:port https://example.com

Thiết Lập Proxy Vĩnh Viễn Cho Người Dùng

nano ~/.wgetrc

Thêm:

http_proxy = http://proxyhost:port
https_proxy = http://proxyhost:port
ftp_proxy = ftp://proxyhost:port
use_proxy = on

Thiết Lập Proxy Toàn Hệ Thống Cho Tất Cả Người Dùng

sudo nano /etc/wgetrc

Tìm các dòng liên quan đến proxy (chúng được nhận xét theo mặc định). Xóa # khỏi mỗi dòng và điền thông tin chi tiết proxy của bạn:

http_proxy = http://proxyhost:port
https_proxy = http://proxyhost:port
ftp_proxy = ftp://proxyhost:port
use_proxy = on

Bỏ Qua Proxy Cho Các Miền Cụ Thể

Thêm một dòng no_proxy vào ~/.wgetrc:

no_proxy = localhost,127.0.0.1,.internal.company.com

Phương pháp 5: Cài Đặt GNOME Desktop

Ubuntu 26.04 đi kèm với GNOME 50 làm môi trường desktop mặc định. GNOME bao gồm một bảng proxy tích hợp dễ sử dụng, nhưng nó đi kèm với một hạn chế quan trọng.

Cách Truy Cập Cài Đặt Proxy GNOME

  1. Mở Settings từ menu ứng dụng hoặc khay hệ thống trên cùng bên phải
  2. Nhấp vào Network trong thanh bên trái
  3. Cuộn xuống Proxy và nhấp vào biểu tượng bánh răng

Trong cửa sổ tiếp theo, bật công tắc "Network proxy" sang vị trí BẬT. Và sau đó, chọn "Manual" từ phần Configuration.

Đặt địa chỉ proxy cho HTTP, HTTPS, FTP và SOCKS riêng lẻ.

Hạn Chế Quan Trọng Của Cài Đặt Proxy GNOME

Cài đặt proxy GNOME chỉ áp dụng cho các ứng dụng GNOME. Trình duyệt, ứng dụng Files và các ứng dụng GUI khác của bạn sẽ tôn trọng các thiết lập này. Nhưng terminal, apt, curl, wget, git và tất cả các công cụ dòng lệnh khác hoàn toàn bỏ qua chúng.

Đây là một nguồn gây nhầm lẫn rất phổ biến. Nhiều người set proxy trong Cài đặt GNOME, mở terminal và sau đó thấy rằng curl vẫn kết nối trực tiếp. Giải pháp là luôn kết hợp Cài đặt GNOME với các biến môi trường để có vùng phủ sóng đầy đủ.

Khi Nào Cài Đặt GNOME Là Đủ

Nếu bạn chỉ cần hỗ trợ proxy cho trình duyệt web và ứng dụng desktop, chỉ riêng Cài đặt GNOME là đủ. Nếu không, hãy sử dụng nó cùng với các phương pháp trong hướng dẫn này.

Phương pháp 6: Git

Hầu như mọi nhà phát triển và quản trị viên đều sử dụng Git. Git sử dụng libcurl nội bộ để xử lý tất cả các kết nối mạng (cả HTTP và HTTPS), có nghĩa là nó có cấu hình proxy riêng biệt với các biến môi trường hệ thống.

Thiết Lập Proxy Git Toàn Cầu

Khóa cấu hình http.proxy của Git bao gồm cả kết nối HTTP và HTTPS. Bạn chỉ cần set một khóa:

git config --global http.proxy http://proxyhost:port

Xác minh thiết lập đã được lưu:

git config --global --list | grep proxy

Thiết Lập Proxy Cho Một Kho Lưu Trữ Đơn Lẻ

Nếu bạn chỉ cần proxy cho một repo cụ thể, hãy chạy lệnh này bên trong thư mục của kho lưu trữ đó:

git config http.proxy http://proxyhost:port

Bỏ Qua Proxy Cho Các Máy Chủ Git Nội Bộ

Nếu bạn có một máy chủ GitLab hoặc Gitea nội bộ nên kết nối trực tiếp, hãy yêu cầu Git bỏ qua proxy cho URL cụ thể đó:

git config --global http.https://gitlab.internal.company.com.proxy ""

Xóa Proxy Git

git config --global --unset http.proxy

Nơi Git Lưu Trữ Các Thiết Lập Này

Git ghi các thiết lập proxy vào ~/.gitconfig. Bạn cũng có thể chỉnh sửa tệp này trực tiếp:

nano ~/.gitconfig

Nó sẽ trông như thế này:

[http]
proxy = http://proxyhost:port

Lưu ý: http.proxy của Git bao gồm cả URL kho lưu trữ HTTP và HTTPS vì Git sử dụng libcurl nội bộ cho tất cả các giao dịch. Bạn không cần (và không nên set) một khóa https.proxy riêng biệt, vì nó không phải là một tùy chọn cấu hình Git được ghi nhận.

Phương pháp 7: pip (Python)

Trình quản lý gói Python pip có cấu hình proxy riêng. Trong khi pip đọc các biến môi trường http_proxy và https_proxy, một tệp pip.conf vĩnh viễn đáng tin cậy hơn và hoạt động bất kể môi trường shell được thiết lập như thế nào.

Thiết Lập Proxy Cho Một Lệnh pip Đơn Lẻ

pip install requests --proxy http://proxyhost:port

Thiết Lập Proxy Vĩnh Viễn Cho Người Dùng

Tạo thư mục và tệp cấu hình pip:

mkdir -p ~/.config/pip
nano ~/.config/pip/pip.conf

Thêm:

[global]
proxy = http://proxyhost:port

Thiết Lập Proxy Toàn Hệ Thống Cho Tất Cả Người Dùng

pip kiểm tra /etc/pip.conf cho các thiết lập toàn cầu trên Linux:

sudo nano /etc/pip.conf

Thêm cùng nội dung:

[global]
proxy = http://proxyhost:port

pip Bên Trong Môi Trường Ảo

Nếu bạn sử dụng môi trường ảo Python, proxy từ tệp pip.conf toàn cầu hoặc người dùng vẫn được áp dụng. Tuy nhiên, nếu bạn cần một proxy khác cho mỗi dự án, hãy tạo một tệp pip.conf bên trong môi trường ảo:

nano /path/to/venv/pip.conf

Thêm cùng một khối [global] với proxy cụ thể cho dự án.

Phương pháp 8: npm (Node.js)

npm lưu trữ cấu hình proxy của nó riêng biệt với các biến môi trường hệ thống. Bạn thiết lập nó bằng lệnh npm config, lệnh này ghi vào ~/.npmrc.

Thiết Lập Proxy npm

npm config set proxy http://proxyhost:port
npm config set https-proxy http://proxyhost:port

Xác Minh Cài Đặt Proxy npm

npm config get proxy
npm config get https-proxy

Xóa Proxy npm

npm config delete proxy
npm config delete https-proxy

Proxy npm Toàn Hệ Thống

Để áp dụng proxy cho tất cả người dùng trên máy, hãy chỉnh sửa tệp npmrc toàn cầu:

sudo npm config set proxy http://proxyhost:port --global
sudo npm config set https-proxy http://proxyhost:port --global

Vấn Đề Chứng Chỉ SSL Với npm

Nếu npm đưa ra lỗi SSL đằng sau proxy chặn, hãy trỏ npm đến gói CA hệ thống của Ubuntu sau khi cài đặt chứng chỉ doanh nghiệp của bạn (xem phần Chứng chỉ CA để biết chi tiết):

npm config set cafile /etc/ssl/certs/ca-certificates.crt

Phương pháp 9: Docker

Docker cần cấu hình proxy ở hai nơi riêng biệt, và nhầm lẫn chúng là một trong những sai lầm phổ biến nhất. Một cấu hình kiểm soát daemon Docker (để kéo images). Cấu hình kia kiểm soát các hoạt động của Docker client bao gồm cả builds.

Phần 1: Proxy Cho Docker Daemon (Kéo Images)

Daemon Docker chạy như một dịch vụ systemd, vì vậy nó cần một tệp drop-in systemd. Tài liệu Docker chính thức khuyên bạn nên tạo một tệp có tên cụ thể:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

Thêm:

[Service]
Environment="HTTP_PROXY=http://proxyhost:port"
Environment="HTTPS_PROXY=http://proxyhost:port"
Environment="NO_PROXY=localhost,127.0.0.1,.internal.company.com"

Ngoài ra, sudo systemctl edit docker tạo cùng một cấu trúc thư mục với một tệp có tên override.conf. Cả hai cách tiếp cận đều hoạt động giống hệt nhau vì systemd đọc tất cả các tệp .conf trong thư mục.

Lưu và thoát, sau đó tải lại và khởi động lại Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

Xác nhận các biến môi trường đang hoạt động:

sudo systemctl show --property=Environment docker

Phần 2: Proxy Cho Docker Client (Builds, Pulls, v.v.)

Cấu hình proxy Docker client trong ~/.docker/config.json kiểm soát cách các thiết lập proxy được chuyển trong các hoạt động Docker CLI — bao gồm docker build, docker pull và các container cần truy cập proxy tại thời gian chạy. Cấu hình nó ở đây:

nano ~/.docker/config.json

Thêm hoặc hợp nhất khối này:

{
"proxies": {
"default": {
"httpProxy": "http://proxyhost:port",
"httpsProxy": "http://proxyhost:port",
"noProxy": "localhost,127.0.0.1,.internal.company.com"
}
}
}

Docker tự động chuyển các giá trị này làm đối số build cho mọi lệnh docker build. Bạn không cần thêm --build-arg theo cách thủ công.

Lưu ý: Các thiết lập proxy trong ~/.docker/config.json áp dụng cho các hoạt động Docker CLI. Chúng được tiêm dưới dạng ARG tại thời gian build trong docker build, và chúng thiết lập các biến môi trường cho các hoạt động tôn trọng chúng. Tuy nhiên, chúng không tự động thiết lập các biến môi trường bên trong các container chạy dài được khởi động với docker run. Các container đó cần các cờ -e rõ ràng của riêng chúng hoặc cấu hình proxy ở cấp ứng dụng của riêng chúng.

Phương pháp 10: Gói Snap

Ubuntu 26.04 vận chuyển nhiều ứng dụng dưới dạng gói Snap. Snap hoàn toàn bỏ qua các biến môi trường hệ thống, /etc/environment và mọi thứ khác được đề cập cho đến nay. Nó có hệ thống proxy riêng được quản lý thông qua snapd.

Thiết Lập Proxy Snap

sudo snap set system proxy.http="http://proxyhost:port"
sudo snap set system proxy.https="http://proxyhost:port"

Xác Minh Proxy Snap

sudo snap get system proxy

Bạn sẽ thấy đầu ra như:

Key           Value
proxy.http    http://proxyhost:port
proxy.https   http://proxyhost:port

Xóa Proxy Snap

sudo snap unset system proxy.http
sudo snap unset system proxy.https

Khởi Động Lại snapd Sau Khi Thay Đổi

Sau khi set proxy, hãy khởi động lại dịch vụ snapd để các thay đổi có hiệu lực ngay lập tức:

sudo systemctl restart snapd

Phương pháp 11: Dịch Vụ Systemd

Bất kỳ ứng dụng nào chạy như một dịch vụ systemd (máy chủ web, daemon scraper, tác vụ đã lên lịch) sẽ không kế thừa các thiết lập proxy từ /etc/environment, ~/.bashrc hoặc bất kỳ cấu hình cấp người dùng nào.

Các dịch vụ systemd chạy trong môi trường biệt lập của riêng chúng. Điều này làm nhiều quản trị viên ngạc nhiên lần đầu tiên họ gặp phải.

Cách tiếp cận chính xác là một tệp ghi đè drop-in systemd, giữ cho các thay đổi của bạn tách biệt khỏi tệp đơn vị gốc để các bản cập nhật gói không ghi đè lên chúng.

Tạo Tệp Ghi Đè Drop-In Cho Bất Kỳ Dịch Vụ Nào

Thay thế servicename bằng tên thực tế của dịch vụ (ví dụ, nginx, myapp hoặc scraper):

sudo systemctl edit servicename

Điều này tạo một tệp ghi đè tại /etc/systemd/system/servicename.service.d/override.conf. Thêm:

[Service]
Environment="http_proxy=http://proxyhost:port"
Environment="https_proxy=http://proxyhost:port"
Environment="no_proxy=localhost,127.0.0.1,.internal.company.com"

Lưu và thoát, sau đó tải lại systemd và khởi động lại dịch vụ:

sudo systemctl daemon-reload
sudo systemctl restart servicename

Xác Minh Dịch Vụ Có Môi Trường Phù Hợp

sudo systemctl show servicename --property=Environment

Áp Dụng Proxy Cho Tất Cả Dịch Vụ Cùng Một Lúc

Nếu bạn muốn mọi dịch vụ systemd trên máy sử dụng cùng một proxy, hãy tạo một tệp môi trường toàn cầu mà systemd đọc:

sudo nano /etc/systemd/system.conf

Tìm phần [Manager] và thêm hoặc bỏ nhận xét:

DefaultEnvironment="http_proxy=http://proxyhost:port" "https_proxy=http://proxyhost:port"

Sau đó tải lại systemd:

sudo systemctl daemon-reload

Sử dụng cách tiếp cận này một cách cẩn thận. Nó áp dụng proxy cho mọi dịch vụ trên máy, điều này hiếm khi bạn muốn.

Xử Lý Xác Thực Proxy

Nhiều máy chủ proxy, đặc biệt là residential và corporate proxies, yêu cầu tên người dùng và mật khẩu. Thêm thông tin đăng nhập vào URL proxy của bạn rất đơn giản, nhưng có một vài trường hợp ngoại lệ cần xử lý cẩn thận.

Định Dạng Xác Thực Cơ Bản

http://username:password@proxyhost:port

Ví dụ:

export http_proxy="http://john:[email protected]:8080"

Để sử dụng tạm thời trong các script mà không lưu trữ thông tin đăng nhập vĩnh viễn:

read -sp "Proxy password: " PROXY_PASS
export http_proxy="http://username:${PROXY_PASS}@proxyhost:port"
unset PROXY_PASS  # Clear after use

Ký Tự Đặc Biệt Trong Mật Khẩu

Nếu mật khẩu của bạn chứa các ký tự đặc biệt như @, :, / hoặc #, bạn phải mã hóa URL chúng. Nếu không, URL proxy sẽ bị hỏng vì các ký tự đó có ý nghĩa đặc biệt bên trong một URL.

Ví dụ, nếu mật khẩu của bạn là p@ss:word, hãy viết nó thành p%40ss%3Aword trong URL proxy.

Bảo Vệ Thông Tin Đăng Nhập Của Bạn

Lưu trữ mật khẩu dưới dạng văn bản thuần túy bên trong .bashrc hoặc /etc/environment là một rủi ro bảo mật. Dưới đây là hai cách tiếp cận tốt hơn:

Lựa chọn 1: Hạn chế quyền tệp

Tạo một tệp riêng chỉ chứa thông tin đăng nhập proxy của bạn:

nano ~/.proxy_credentials

Thêm:

export http_proxy="http://username:password@proxyhost:port"
export https_proxy="http://username:password@proxyhost:port"
export ALL_PROXY="http://username:password@proxyhost:port"

Khóa tệp lại để chỉ người dùng của bạn mới có thể đọc nó:

chmod 600 ~/.proxy_credentials

Sau đó, lấy nguồn từ .bashrc của bạn:

source ~/.proxy_credentials

Lựa chọn 2: Sử dụng trình quản lý bí mật

Đối với các máy chủ sản xuất, hãy xem xét các công cụ như pass (trình quản lý mật khẩu Unix tiêu chuẩn) hoặc HashiCorp Vault để lưu trữ và tiêm thông tin đăng nhập proxy tại thời gian chạy. Cách tiếp cận này giữ cho thông tin đăng nhập hoàn toàn ra khỏi các tệp cấu hình và là lựa chọn đúng đắn cho bất kỳ máy chủ nào có nhiều người dùng hoặc triển khai tự động.

Cài Đặt Chứng Chỉ CA Doanh Nghiệp

Trong môi trường doanh nghiệp và công ty, các máy chủ proxy thường sử dụng kiểm tra TLS. Chúng chặn các kết nối HTTPS của bạn và ký lại chúng bằng chứng chỉ gốc của riêng chúng. Mọi công cụ CLI sẽ đưa ra lỗi SSL cho đến khi bạn cài đặt chứng chỉ gốc đó vào kho tin cậy hệ thống của Ubuntu.

Đây là bản sửa lỗi vĩnh viễn thích hợp. Không bao giờ sử dụng -k trong curl hoặc --no-check-certificate trong wget như một giải pháp thay thế. Các cờ đó vô hiệu hóa tất cả xác minh chứng chỉ và khiến bạn dễ bị tấn công trung gian từ bất kỳ nguồn nào, không chỉ proxy của bạn.

Bước 1: Lấy Chứng Chỉ CA Doanh Nghiệp

Hãy Hãy hỏi nhóm CNTT hoặc mạng của bạn cho tệp chứng chỉ CA gốc. Nó thường sẽ ở định dạng .crt hoặc .pem. Nếu bạn không thể lấy tệp trực tiếp, bạn có thể xuất nó từ một trình duyệt đã tin cậy proxy.

Bước 2: Sao Chép Chứng Chỉ Đến Đúng Vị Trí

sudo cp your-corporate-ca.crt /usr/local/share/ca-certificates/

Tệp phải có phần mở rộng .crt. Nếu chứng chỉ của bạn ở định dạng .pem, hãy đổi tên nó trước:

sudo cp your-corporate-ca.pem /usr/local/share/ca-certificates/your-corporate-ca.crt

Bước 3: Xây Dựng Lại Gói CA Hệ Thống

sudo update-ca-certificates

Bạn sẽ thấy đầu ra xác nhận chứng chỉ đã được thêm:

Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.

Sau đó, curl, wget, apt, git, pip, npm và hầu hết các công cụ khác sẽ tự động tin cậy chứng chỉ proxy doanh nghiệp của bạn. Bạn không cần cấu hình từng công cụ riêng lẻ.

Bước 4: Xác Minh Chứng Chỉ Được Tin Cậy

Kiểm tra với một yêu cầu curl đơn giản qua proxy của bạn:

curl -x http://proxyhost:port https://example.com

Nếu bạn không còn thấy lỗi SSL, việc cài đặt chứng chỉ đã hoạt động chính xác.

Kho SSL Java và Python

Lưu ý rằng Java và một số thư viện Python duy trì kho chứng chỉ riêng biệt của chúng và không tự động đọc gói hệ thống của Ubuntu.

Đối với Java, vị trí tệp cacerts phụ thuộc vào phiên bản JVM bạn đã cài đặt. Tìm nó trước, sau đó nhập:

# Step 1 — Find your Java cacerts file
find /usr/lib/jvm -name "cacerts" 2>/dev/null
# Step 2 — Import your corporate CA (replace the path with the one found above)
sudo keytool -import -alias corporate-ca \
-file /usr/local/share/ca-certificates/your-corporate-ca.crt \
-keystore /usr/lib/jvm/java-21-openjdk-amd64/lib/security/cacerts \
-storepass changeit -noprompt

Lệnh find là cần thiết vì đường dẫn thay đổi theo mọi phiên bản JVM và phương pháp cài đặt. Sử dụng một đường dẫn cứng sẽ thất bại một cách âm thầm nếu JVM của bạn được cài đặt khác.

Vấn Đề sudo Mà Mọi Quản Trị Viên Gặp Phải

Đây là lỗi proxy phổ biến nhất trên Ubuntu, và nó ảnh hưởng đến cả những quản trị viên giàu kinh nghiệm.

Khi bạn chạy bất kỳ lệnh nào với sudo, sudo loại bỏ các biến môi trường của bạn theo mặc định như một biện pháp bảo mật. Điều này có nghĩa là http_proxy, https_proxy và mọi biến proxy khác bạn set sẽ đơn giản biến mất cho lệnh đó, ngay cả khi chúng được cấu hình hoàn hảo trong shell của bạn.

Vì vậy, khi bạn set các biến môi trường và sau đó chạy sudo apt update, APT không bỏ qua proxy của bạn vì APT bỏ qua các biến môi trường (điều mà nó làm). Vấn đề sâu xa hơn là sudo đã loại bỏ chúng trước khi APT thậm chí bắt đầu.

Sửa Nhanh: Sử Dụng sudo -E Cho Một Lệnh Đơn Lẻ

Cờ -E yêu cầu sudo giữ lại các biến môi trường của bạn:

sudo -E curl https://example.com
sudo -E pip install requests

Tuy nhiên, điều này chỉ hoạt động cho một lệnh đó, và nó không sửa được apt vì APT có cấu hình proxy riêng.

Sửa Vĩnh Viễn: Cấu Hình sudoers Để Giữ Lại Các Biến Proxy

Giải pháp vĩnh viễn thích hợp là yêu cầu sudo giữ lại các biến nào cho tất cả các lệnh. Chỉnh sửa tệp sudoers một cách an toàn bằng visudo:

sudo visudo

Tìm phần Defaults và thêm dòng này:

Defaults env_keep += "http_proxy https_proxy ftp_proxy no_proxy ALL_PROXY HTTP_PROXY HTTPS_PROXY NO_PROXY"

Lưu và thoát. Kể từ thời điểm này, sudo sẽ giữ lại các biến môi trường proxy của bạn cho mọi lệnh.

Xác Minh sudo Giữ Lại Các Biến

Kiểm tra xem nó có hoạt động không:

export http_proxy="http://proxyhost:port"
sudo printenv http_proxy

Nếu bạn thấy địa chỉ proxy được in, sudo hiện đang giữ lại biến một cách chính xác.

Lưu ý bảo mật: Giữ lại các biến môi trường proxy trong sudoers là an toàn trong hầu hết các môi trường. Tuy nhiên, hãy lưu ý rằng trên các hệ thống nhạy cảm cao, các biến proxy về mặt lý thuyết có thể bị thao túng để chuyển hướng lưu lượng đặc quyền. Trong những trường hợp đó, hãy cấu hình từng công cụ đặc quyền (APT, pip cấp hệ thống, v.v.) với tệp cấu hình riêng thay vì dựa vào các biến môi trường được kế thừa.

Xác Minh Proxy Của Bạn Thực Sự Hoạt Động

Có một sự khác biệt quan trọng giữa việc kiểm tra một biến được set và xác nhận rằng proxy thực sự đang định tuyến lưu lượng của bạn.

Chạy echo $http_proxy chỉ xác nhận biến tồn tại trong shell của bạn. Nó không cho bạn biết gì về việc proxy có thể truy cập được hay đang hoạt động.

Sử dụng các lệnh này để xác nhận kết nối proxy thực sự.

Kiểm Tra IP Mà Thế Giới Thấy

Đây là bài kiểm tra đáng tin cậy nhất. Nó gửi một yêu cầu qua proxy của bạn và trả về địa chỉ IP mà máy chủ đích nhìn thấy:

curl -x http://proxyhost:port https://httpbin.org/ip

Nếu proxy đang hoạt động, địa chỉ IP trong phản hồi phải khớp với IP của máy chủ proxy của bạn, không phải IP của máy cục bộ của bạn. Nếu nó hiển thị IP thực của bạn, proxy đang bị bỏ qua.

Xem Bắt Tay Proxy Ở Chế Độ Chi Tiết

Cờ -v hiển thị chính xác những gì curl đang làm từng bước:

curl -v -x http://proxyhost:port https://example.com

Tìm một dòng như Connected to proxyhost ở gần đầu. Nếu bạn thấy Connected to example.com thay vào đó, curl đang bỏ qua proxy.

Kiểm Tra sudo Có Giữ Lại Proxy Không

export http_proxy="http://proxyhost:port"
sudo -E curl -x $http_proxy https://httpbin.org/ip

Kiểm Tra APT Riêng Biệt

APT không sử dụng các biến môi trường, vì vậy hãy kiểm tra nó một cách độc lập:

sudo apt update -o Acquire::http::proxy="http://proxyhost:port"

Nếu điều này hoạt động nhưng sudo apt update thông thường của bạn thì không, tệp cấu hình APT của bạn có vấn đề.

Kiểm Tra Đường Dẫn Mạng Của Dịch Vụ Systemd

Để xác nhận một dịch vụ đang định tuyến qua proxy, hãy kiểm tra môi trường mà nó thực sự thấy:

sudo systemctl show myservice --property=Environment

Để Xác Minh Proxy Daemon Docker

sudo systemctl show docker --property=Environment

Tương Thích Shell: bash, zsh và fish

Hướng dẫn này sử dụng cú pháp bash trong suốt, vì Ubuntu 26.04 mặc định là bash. Tuy nhiên, nhiều nhà phát triển sử dụng zsh hoặc fish, và cú pháp để set các biến môi trường khác nhau giữa chúng.

bash

Thêm vào ~/.bashrc (shell tương tác) hoặc ~/.bash_profile (shell đăng nhập):

export http_proxy="http://proxyhost:port"
export https_proxy="http://proxyhost:port"
export no_proxy="localhost,127.0.0.1"

zsh

Cú pháp giống hệt bash. Thêm vào ~/.zshrc:

export http_proxy="http://proxyhost:port"
export https_proxy="http://proxyhost:port"
export no_proxy="localhost,127.0.0.1"

fish

Fish sử dụng một cú pháp hoàn toàn khác. Thêm vào ~/.config/fish/config.fish:

set -x http_proxy "http://proxyhost:port"
set -x https_proxy "http://proxyhost:port"
set -x no_proxy "localhost,127.0.0.1"

Fish không sử dụng export. Thay vào đó, cờ -x trên set đánh dấu một biến là được xuất cho các tiến trình con — đây là tương đương fish của export.

Lưu ý: Bất kể bạn sử dụng shell nào, các cấu hình cấp hệ thống (/etc/environment, /etc/profile.d/proxy.sh, APT, curl, wget, Git, pip, npm, Docker, Snap và systemd) vẫn giữ nguyên. Cú pháp shell chỉ ảnh hưởng đến các tệp ~/.*rc cấp người dùng.

Hiểu Về Mức Độ Ưu Tiên Của Biến

Khi nhiều thiết lập proxy tồn tại cùng một lúc (một biến môi trường, một tệp cấu hình công cụ và một cờ dòng lệnh), cái nào thắng? Hiểu thứ tự ngăn chặn hàng giờ gỡ lỗi khi một thiết lập dường như không có hiệu lực.

Mức Độ Ưu Tiên curl (Cao nhất đến Thấp nhất)

Một cờ dòng lệnh luôn thắng. Nếu bạn set một proxy trong ~/.curlrc nhưng sau đó chạy curl --noproxy "*", cờ sẽ ghi đè hoàn toàn tệp cấu hình. Lưu ý rằng curl không có tệp cấu hình toàn hệ thống trên Linux — các biến môi trường là cơ chế toàn hệ thống.

Mức Độ Ưu Tiên wget (Cao nhất đến Thấp nhất)

Mức Độ Ưu Tiên git (Cao nhất đến Thấp nhất)

Mức Độ Ưu Tiên pip (Cao nhất đến Thấp nhất)

Kết luận thực tế là: các cờ dòng lệnh luôn thắng, các biến môi trường luôn thua. Nếu một công cụ không nhận proxy của bạn, hãy kiểm tra xem một tệp cấu hình ở đâu đó có đang ghi đè biến môi trường của bạn bằng một thiết lập khác không.

Hướng Dẫn Định Dạng no_proxy

Biến no_proxy yêu cầu các công cụ truy cập trực tiếp vào các máy chủ nào, bỏ qua proxy. Tuy nhiên, các công cụ khác nhau diễn giải nó khác nhau. Và nếu bạn sai định dạng, bạn sẽ định tuyến lưu lượng nội bộ qua proxy hoặc bỏ qua proxy cho các máy chủ nên sử dụng nó.

Định Dạng Tương Thích Nhất

Định dạng này hoạt động chính xác trên phạm vi rộng nhất của các công cụ:

export no_proxy="localhost,127.0.0.1,::1,.company.internal,10.0.0.0/8,192.168.0.0/16"

Các quy tắc chính:

  • Sử dụng dấu phẩy để phân tách các mục - không có dấu cách sau dấu phẩy trong hầu hết các công cụ
  • Sử dụng dấu chấm đầu (.company.internal) để khớp một miền và tất cả các miền phụ của nó. Nếu không có dấu chấm, hầu hết các công cụ chỉ khớp với tên máy chủ chính xác
  • Bạn có thể bao gồm ký hiệu CIDR cho các dải IP, nhưng không phải tất cả các công cụ đều hỗ trợ nó - curl và wget có; các công cụ cũ hơn có thể không
  • Luôn bao gồm localhost và 127.0.0.1 một cách rõ ràng

Sự Khác Biệt Cụ Thể Theo Công Cụ

Lỗi Phổ Biến: Thiếu Dấu Chấm Đầu

Nếu không có dấu chấm đầu, company.internal chỉ bỏ qua proxy cho tên máy chủ chính xác company.internal. Các miền phụ như gitlab.company.internal sẽ vẫn đi qua proxy. Luôn sử dụng .company.internal để bao phủ miền và tất cả các miền phụ của nó.

Khắc Phục Sự Cố Thường Gặp

Ngay cả sau khi cấu hình cẩn thận, đôi khi mọi thứ vẫn có thể sai. Dưới đây là các vấn đề phổ biến nhất và giải pháp của chúng.

1. Proxy của tôi hoạt động trong trình duyệt nhưng không hoạt động trong terminal.

Cài đặt proxy GNOME chỉ áp dụng cho các ứng dụng GUI. Mở ~/.bashrc và thêm các biến môi trường proxy như được hiển thị trong Phương pháp 1. Sau đó chạy source ~/.bashrc.

2. Tôi đã set các biến môi trường nhưng APT vẫn thất bại.

APT bỏ qua các biến môi trường theo thiết kế. Tạo /etc/apt/apt.conf.d/proxy.conf như được mô tả trong Phương pháp 2.

3. Tôi đã set các biến môi trường nhưng các lệnh sudo vẫn bỏ qua proxy.

sudo loại bỏ các biến môi trường theo mặc định. Hoặc sử dụng sudo -E cho các lệnh riêng lẻ, hoặc thêm các biến proxy vào danh sách env_keep trong /etc/sudoers bằng sudo visudo. Xem phần Vấn Đề sudo ở trên.

4. curl hoạt động nhưng wget thì không.

Chúng sử dụng các tệp cấu hình riêng biệt. Thêm proxy của bạn vào ~/.wgetrc như được mô tả trong Phương pháp 4.

5. Tôi đã set mọi thứ nhưng các kết nối HTTPS vẫn thất bại với lỗi SSL.

Bạn đang ở đằng sau một proxy chặn ký lại chứng chỉ. Cài đặt chứng chỉ CA gốc của tổ chức bạn bằng các bước trong phần CA Certificates. Không bao giờ sử dụng -k hoặc --no-check-certificate như một bản sửa lỗi vĩnh viễn.

6. Dịch vụ systemd của tôi vẫn bỏ qua proxy.

Các dịch vụ không kế thừa các biến môi trường. Sử dụng sudo systemctl edit servicename để tạo một tệp ghi đè drop-in với các dòng Environment= rõ ràng. Xem Phương pháp 11.

7. Các ứng dụng Snap bỏ qua các thiết lập proxy của tôi.

Snap có hệ thống proxy riêng. Chạy sudo snap set system proxy.http="http://proxyhost:port" và sudo snap set system proxy.https="...", sau đó khởi động lại snapd. Xem Phương pháp 10.

8. Git clone thất bại mặc dù curl hoạt động tốt.

Git không kế thừa các biến môi trường hệ thống một cách đáng tin cậy cho việc sử dụng proxy. Thiết lập proxy một cách rõ ràng với git config --global http.proxy http://proxyhost:port. Lưu ý rằng một khóa duy nhất này bao gồm cả kết nối HTTP và HTTPS. Xem Phương pháp 6.

9. pip install thất bại đằng sau proxy.

Tạo ~/.config/pip/pip.conf và thêm một dòng [global] proxy = .... Xem Phương pháp 7.

10. Docker không thể kéo images.

Daemon Docker là một dịch vụ systemd, vì vậy nó cần tệp drop-in riêng. Xem Phương pháp 9, Phần 1. Điều này tách biệt với cấu hình Docker client trong ~/.docker/config.json.

11. Các biến môi trường của tôi biến mất sau khi tôi đăng xuất.

Các biến được set với export trong terminal chỉ tồn tại trong phiên đó. Thêm chúng vào ~/.bashrc cho người dùng của bạn, hoặc /etc/environment hoặc /etc/profile.d/proxy.sh cho tất cả người dùng.

12. Các thiết lập proxy của tôi hoạt động nhưng một số máy chủ nội bộ không thể truy cập được.

Kiểm tra biến no_proxy của bạn. Đảm bảo các tên máy chủ nội bộ có dấu chấm đầu (.company.internal) và bạn đã bao gồm các dải IP có liên quan. Xem Hướng dẫn Định dạng no_proxy ở trên.

13. Tôi đang gặp lỗi xác thực mặc dù thông tin đăng nhập của tôi đúng.

Kiểm tra các ký tự đặc biệt trong mật khẩu của bạn. Mã hóa URL bất kỳ ký tự @, :, / hoặc #. Xem phần Authentication ở trên.

Bảng Tham Khảo Nhanh

Dưới đây là bảng tóm tắt đầy đủ về mọi công cụ được đề cập trong hướng dẫn này. (Bảng bị thiếu trong source, chỉ có tiêu đề.)

Tổng Kết Cuối Cùng

Cấu hình proxy trên Ubuntu 26.04 tốn nhiều công sức hơn hầu hết mọi người mong đợi, nhưng mô hình này nhất quán một khi bạn hiểu nó: mỗi công cụ tự quản lý proxy của nó, và các biến môi trường chỉ là điểm khởi đầu, không phải là một giải pháp hoàn chỉnh.

Những điều quan trọng nhất cần rút ra từ hướng dẫn này là:

  • Bắt đầu với các biến môi trường trong ~/.bashrc và /etc/environment. Chúng bao phủ phạm vi rộng nhất của các công cụ với ít nỗ lực nhất.
  • Luôn cấu hình APT riêng biệt. Nó không bao giờ đọc các biến môi trường.
  • Hãy nhớ rằng sudo loại bỏ môi trường của bạn. Hoặc sử dụng sudo -E hoặc cấu hình env_keep trong sudoers.
  • Các dịch vụ systemd và gói Snap có các hệ thống proxy hoàn toàn riêng biệt bỏ qua mọi thứ khác.
  • Cài đặt chứng chỉ CA của tổ chức bạn vào kho tin cậy của Ubuntu một lần, và hầu hết các vấn đề HTTPS sẽ biến mất trên tất cả các công cụ cùng một lúc.
  • Luôn sử dụng tên biến proxy chữ thường. Chúng được hỗ trợ rộng rãi và tránh lỗ hổng bảo mật httpoxy.
  • http.proxy của Git bao gồm cả kết nối HTTP và HTTPS. Bạn chỉ cần set nó một lần.
  • curl không có tệp cấu hình toàn hệ thống trên Linux; sử dụng các biến môi trường qua /etc/profile.d/proxy.sh cho proxy curl toàn hệ thống.

Với cấu hình phù hợp trên mọi lớp của ngăn xếp, máy Ubuntu của bạn sẽ định tuyến lưu lượng chính xác đến nơi bạn muốn, mọi lúc.