Conan proxy: cấu hình mạng Conan 2 bằng global.conf
Conan proxy là cách cho trình quản lý gói C và C++ Conan tải recipe và binary qua máy trung gian. Conan 2 đặt proxy trong tệp global.conf với khóa core.net.http:proxies, khác hẳn tệp conan.conf của Conan 1. ProxyVN chạy Conan 2.33.0 qua proxy HTTP có mật khẩu tự dựng, tải thật recipe zlib từ ConanCenter và ghi lại 11 ca thử.
Conan proxy trong Conan 2 khác Conan 1
conan.conf đã được thay bằng global.conf

conan.conf đã thành global.conf
Conan 1 cấu hình proxy trong mục proxies của tệp conan.conf, cú pháp kiểu INI. Conan 2 bỏ tệp đó, mọi cấu hình chung chuyển sang tệp global.conf của Conan 2, dạng khóa bằng giá trị với giá trị là biểu thức Python. Hướng dẫn trên mạng viết cho Conan 1 không áp dụng được.
Lệnh conan config list in danh sách khóa cấu hình kèm mô tả. Với từ khóa net, Conan 2.33.0 trong lab liệt kê các khóa mạng: core.net.http:proxies, core.net.http:no_proxy_match, core.net.http:clean_system_proxy, core.net.http:timeout, core.net.http:max_retries, core.net.http:cacert_path, core.net.http:client_cert và core.net.http:trust_store.
Dấu hiệu nhanh để biết hướng dẫn nói về bản nào: có conan.conf là Conan 1, có global.conf là Conan 2. Đừng trộn hai loại trong cùng một máy dựng.
Ba thứ cần tách: proxy, tài khoản remote, cache

Proxy, tài khoản remote, cache là ba thứ
Brief của bài yêu cầu tách proxy khỏi tài khoản remote và cache. Ba thứ này hay bị lẫn. Proxy là đường mạng tới remote. Tài khoản remote là quyền đăng nhập vào máy chủ gói như Artifactory, quản lý bằng conan remote login. Cache là thư mục trên máy giữ recipe và binary đã tải.
Proxy sai thì không tới được remote. Tài khoản remote sai thì tới được nhưng bị từ chối. Cache có sẵn gói thì có thể không cần mạng. Phần sau đi từng thứ với kết quả lab.
Ranh giới với các bài trình quản lý gói khác
Bài pip proxy, npm proxy và Homebrew proxy nói về trình quản lý gói khác. Bài này chỉ nói về Conan 2: khóa trong global.conf, cách Conan đọc biến môi trường, danh sách bỏ qua, đăng nhập remote và cache cục bộ.
Chuẩn bị lab Conan proxy
Cài Conan và thư mục riêng
Conan viết bằng Python, cài qua pip. Lab dùng môi trường ảo Python 3.12 trên Windows 10, bản Conan 2.33.0. Để không đụng cấu hình Conan của máy, mình đặt biến CONAN_HOME trỏ tới một thư mục riêng. Mọi tệp global.conf, profile và cache nằm trong thư mục này.
python -m venv venv
venv\Scripts\python -m pip install conan
set CONAN_HOME=D:\lab\conanhome
venv\Scripts\conan profile detect --force
venv\Scripts\conan remote list
Lệnh remote list in ra remote mặc định conancenter trỏ tới https://center2.conan.io với Verify SSL bật. Mọi request tới ConanCenter đi bằng HTTPS, nên qua proxy HTTP sẽ là lệnh CONNECT tới center2.conan.io cổng 443.
Proxy thử có nhật ký
Proxy thử là chương trình Python nghe cổng 8942, đòi tài khoản user1 với mật khẩu p@ss#2026, ghi mọi kết nối vào tệp nhật ký. Nhờ nhật ký, mình biết chính xác lệnh Conan nào có đi qua proxy và có gửi tài khoản đúng hay không.
Lab dùng lệnh conan search để kiểm đường mạng vì lệnh này nhẹ, chỉ hỏi remote danh sách phiên bản. Kết quả đúng là danh sách zlib/1.3, zlib/1.3.1, zlib/1.3.2.
Project lab
Brief yêu cầu project Conan lab và tải một gói nhỏ. Project tối thiểu là một tệp conanfile.txt khai một phụ thuộc. Mình chọn zlib vì nhỏ và có sẵn trên ConanCenter.
[requires]
zlib/1.3.1
[generators]
CMakeDeps
CMakeToolchain
Phần tải gói trong lab dùng conan download với --only-recipe để chỉ tải recipe, không biên dịch. Cách này đủ để chứng minh đường mạng qua proxy mà không cần trình biên dịch C trên máy lab.
Cấu hình Conan proxy bằng core.net.http:proxies
Cú pháp từ điển
Giá trị của core.net.http:proxies là một từ điển Python, khóa là giao thức của URL đích, giá trị là URL proxy. Conan dùng thư viện requests bên dưới, nên từ điển này có cùng ý nghĩa với tham số proxies của requests.
core.net.http:proxies = {"https": "http://user1:p%40ss%232026@127.0.0.1:8942", "http": "http://user1:p%40ss%232026@127.0.0.1:8942"}
Với cấu hình này, conan search zlib/1.3* trả đúng danh sách phiên bản. Nhật ký proxy ghi CONNECT center2.conan.io:443 với tài khoản user1, xác thực đạt. Không có khóa này và không có biến môi trường proxy, cùng lệnh đi thẳng ra Internet.
Khóa https là khóa quan trọng
Vì remote dùng HTTPS, khóa https trong từ điển mới quyết định. Chỉ khai khóa http, request tới ConanCenter sẽ không đi proxy. Khai cả hai khóa cùng giá trị nếu có remote nội bộ dùng http. Giá trị của khóa https vẫn là URL bắt đầu bằng http:// vì đó là cách kết nối tới chính proxy HTTP.
Mã hóa mật khẩu trong URL proxy
Tài khoản nằm trong URL nên mật khẩu phải mã hóa phần trăm: @ thành %40, # thành %23. Trong lab, chuỗi mã hóa cho proxy nhận đúng mật khẩu. Bài định dạng proxy có bảng mã hóa ký tự hay gặp.
Khi viết global.conf bằng lệnh printf trong shell, dấu % có nghĩa riêng phải viết đôi thành %%. Mình suýt mắc lỗi này khi dựng lab. Viết tệp bằng trình soạn thảo thay vì lệnh shell để tránh.
Đặt qua dòng lệnh cho một lần chạy
Conan 2 cho truyền cấu hình cho một lệnh bằng tham số -cc, ghi đè global.conf chỉ cho lần chạy đó. Cách này tiện khi thử proxy mới mà không sửa tệp.
conan search "zlib/1.3*" -r conancenter -cc "core.net.http:proxies={'https': 'http://127.0.0.1:8080'}"
Trên PowerShell và cmd, chú ý dấu nháy lồng nhau. Nếu gặp lỗi phân tích giá trị, chuyển sang viết global.conf.
Đọc lỗi Conan proxy
Sai tài khoản proxy
Với mật khẩu sai, conan search báo ERROR có đoạn ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required')), kèm dòng Unable to connect to remote conancenter=https://center2.conan.io. Thông điệp đến từ urllib3 bên dưới requests.
Conan in thêm gợi ý kiểm remote có tới được không, tắt remote hoặc dùng -nr. Gợi ý này chung cho mọi lỗi kết nối, đừng vội tắt remote. Đọc đoạn ProxyError trước: có chữ 407 là lỗi tài khoản proxy. Bài sửa lỗi 407 Proxy Authentication Required liệt kê nguyên nhân phía nhà cung cấp.
Proxy không mở cổng
Với proxy trỏ tới cổng 8999 không có gì, lỗi là ProxyError('Unable to connect to proxy', NewConnectionError(... Failed to establish a new connection...)). Từ khóa Unable to connect to proxy cho biết lỗi ở chặng tới proxy. Kiểm máy, cổng và tường lửa giữa máy dựng với proxy.
max_retries và timeout
Lần đầu chạy ca sai mật khẩu với max_retries bằng 1, nhật ký ghi hai lệnh CONNECT bị từ chối cho một lệnh search. Đặt max_retries bằng 0, chỉ còn một. Với proxy có giới hạn số lần xác thực sai trước khi khóa tài khoản, thử lại nhiều lần với mật khẩu sai có thể làm tài khoản bị khóa.
core.net.http:timeout là số giây chờ không có phản hồi. Với proxy chậm hay ở xa, tăng giá trị này. Với máy dựng CI, giữ giá trị vừa phải để lỗi đến sớm thay vì treo pipeline.
Ca |
Cấu hình |
Kết quả |
|---|---|---|
Đi thẳng |
Không proxy |
Danh sách zlib, không có dòng nhật ký |
Proxy qua global.conf |
Tài khoản đúng |
Danh sách zlib, CONNECT có user1 |
Sai mật khẩu |
global.conf |
ProxyError, Tunnel connection failed: 407 |
Proxy chết |
global.conf, timeout 5 |
ProxyError, Failed to establish a new connection |
Chỉ biến HTTPS_PROXY |
global.conf rỗng |
Danh sách zlib, CONNECT có user1 |
clean_system_proxy với biến trỏ proxy chết |
global.conf |
Danh sách zlib, đi thẳng |
no_proxy_match khớp remote |
proxies trỏ proxy chết |
Danh sách zlib, đi thẳng |
Tải recipe zlib/1.3.1 |
Proxy đúng |
Recipe về cache, có CONNECT |
Liệt kê cache |
Không cần mạng |
zlib/1.3.1 trong Local Cache |
Tải lại recipe |
Proxy đúng |
Vẫn hỏi remote, có CONNECT mới |
graph info với -nr |
Proxy trỏ cổng chết |
Recipe lấy từ Cache, không cần mạng |
Bảng này là đầu ra bắt buộc của brief: lỗi proxy, lỗi kết nối và hành vi cache. Phần lỗi tài khoản remote ở phần sau.
Biến môi trường và Conan proxy
Conan đọc HTTPS_PROXY
Với global.conf rỗng và chỉ đặt HTTPS_PROXY trỏ về proxy thử, conan search vẫn qua proxy, nhật ký ghi CONNECT có tài khoản. Lý do là requests đọc biến môi trường proxy theo mặc định. Máy dựng có sẵn biến proxy cho công cụ khác sẽ tự động áp cho Conan.
Điều này tiện nhưng cũng là nguồn bất ngờ. Một máy dựng có HTTPS_PROXY cho pip sẽ đẩy cả Conan qua proxy đó, kể cả khi remote Conan nằm trong mạng nội bộ. Ghi rõ trong tài liệu máy dựng Conan đang theo biến môi trường hay theo global.conf.
clean_system_proxy
Khóa core.net.http:clean_system_proxy khi đặt sẽ bỏ qua biến proxy của hệ thống. Trong lab, đặt clean_system_proxy = True và HTTPS_PROXY trỏ tới cổng chết, conan search vẫn chạy và đi thẳng. Nghĩa là Conan đã không đọc biến môi trường.
Dùng khóa này khi muốn Conan có hành vi riêng, không bị ảnh hưởng bởi biến của máy. Kết hợp với core.net.http:proxies để Conan chỉ đi proxy theo đúng cấu hình của nó.
no_proxy_match
Khóa core.net.http:no_proxy_match nhận danh sách mẫu URL bỏ qua proxy. Trong lab, đặt proxies trỏ tới cổng chết và no_proxy_match là ["https://center2.conan.io*"], conan search chạy bình thường và đi thẳng. Mẫu so với URL đầy đủ có ký tự đại diện, không chỉ tên máy.
Với tổ chức có remote nội bộ và ConanCenter cùng lúc, cấu hình hay gặp là proxies cho ConanCenter và no_proxy_match cho URL của remote nội bộ. Bài no_proxy là gì giải thích ý tưởng chung của danh sách bỏ qua.
Tài khoản remote khác tài khoản proxy trong Conan proxy
conan remote login
Remote riêng như Artifactory hay máy chủ Conan nội bộ thường đòi đăng nhập. Conan 2 quản lý bằng lệnh conan remote login với tên remote và tên người dùng, mật khẩu nhập tương tác hoặc qua tham số. Thông tin đăng nhập lưu trong cache của Conan, gắn với từng remote.
conan remote add company https://conan.company.example/artifactory/api/conan/conan-local
conan remote login company build-bot -p
Tài khoản này đi tới máy chủ gói qua tiêu đề Authorization, trong đường hầm HTTPS. Proxy không thấy và không xử lý nó. Tài khoản proxy đi tới proxy qua tiêu đề Proxy-Authorization ở lệnh CONNECT. Hai tài khoản độc lập, sai cái nào báo lỗi khác nhau.
Biến môi trường cho CI
Trên máy CI, Conan 2 cho đặt tài khoản remote qua biến môi trường CONAN_LOGIN_USERNAME và CONAN_PASSWORD, có biến thể theo tên remote. Tài khoản proxy đặt trong global.conf hoặc biến HTTPS_PROXY. Lưu cả hai vào mục secret của CI, không ghi vào tệp cấu hình được commit.
Mình không có remote riêng để thử đăng nhập trong lab, phần này theo tài liệu Conan. Hãy kiểm với remote thật của tổ chức.
Phân biệt lỗi
Lỗi tài khoản proxy hiện thành ProxyError có 407 như đã thấy. Lỗi tài khoản remote là phản hồi 401 hoặc 403 từ chính máy chủ gói, sau khi đã qua proxy. Nếu thông báo có chữ ProxyError, sửa proxy. Nếu không có ProxyError mà có mã 401, 403, sửa tài khoản remote.
Với Conan proxy, ProxyError là lỗi ở chặng tới proxy, còn 401 và 403 không kèm ProxyError là lỗi đăng nhập remote. Đừng đổi mật khẩu remote khi lỗi thật nằm ở proxy.
Cache cục bộ và Conan proxy
Cache có sẵn thì có cần mạng không

Cache có sẵn thì không cần mạng
Sau khi tải recipe zlib/1.3.1 qua proxy, conan list "zlib/*" liệt kê zlib/1.3.1 trong Local Cache mà không cần mạng. Mình đổi proxy sang cổng chết rồi chạy conan graph info --requires=zlib/1.3.1 với -nr, nghĩa là không dùng remote. Conan lấy recipe từ Cache và dựng đồ thị bình thường.
Trong kết quả, gói binary được đánh dấu Invalid vì profile của máy lab chưa có binary phù hợp, chuyện này không liên quan mạng. Điểm cần nhớ là với -nr, Conan không đụng tới proxy hay remote.
Tải lại vẫn hỏi remote
Chạy lại conan download cùng recipe khi đã có trong cache, nhật ký proxy vẫn ghi CONNECT mới. Conan hỏi remote để kiểm bản sửa đổi mới nhất. Muốn dùng hẳn bản trong cache, chạy lệnh với -nr hoặc khóa phiên bản bằng tệp lock.
Với máy dựng có mạng chập chờn qua proxy, kết hợp cache và tệp lock giúp bản dựng ổn định. Tệp lock ghi đúng bản sửa đổi của từng recipe, nên hai lần dựng cách nhau vài tuần vẫn dùng cùng gói, không phụ thuộc remote có bản mới hay không. Lần đầu tải qua proxy, các lần sau dùng cache với -nr, chỉ khi cập nhật phụ thuộc mới cần mạng lại.
Chia sẻ cache giữa các máy
Conan 2 có lệnh lưu và khôi phục cache thành tệp nén. Một máy có mạng tải đủ gói qua proxy, lưu cache, chuyển sang máy dựng trong mạng kín, khôi phục rồi chạy với -nr. Mình chưa thử lệnh này trong lab, cần đối chiếu tài liệu đúng bản Conan.
Chứng chỉ khi dùng Conan proxy sau mạng công ty
cacert_path và trust_store
Sau proxy kiểm tra TLS của công ty, chứng chỉ của center2.conan.io do CA nội bộ ký. requests mặc định dùng bộ chứng chỉ certifi, không có CA nội bộ, nên báo lỗi SSL. Khóa core.net.http:cacert_path trỏ tới tệp PEM có CA nội bộ.
Khóa core.net.http:trust_store, đang ở trạng thái thử nghiệm theo mô tả trong lab, khi bật sẽ kiểm thêm chứng chỉ theo kho của hệ điều hành qua gói truststore, cần Python 3.10 trở lên. Với máy Windows mà công ty đã cài CA nội bộ vào kho hệ thống, đây là cách ít phải bảo trì tệp PEM.
Không tắt Verify SSL
Remote có thuộc tính Verify SSL, có thể tắt bằng conan remote update. Tắt kiểm tra để chữa lỗi chứng chỉ là mở cửa cho gói bị thay thế trên đường đi. Gói C, C++ chạy với quyền cao trong bản dựng, gói giả là rủi ro lớn. Dùng cacert_path hoặc trust_store thay vì tắt.
Conan proxy khi biên dịch gói từ mã nguồn
Mã nguồn không đến từ remote
Khi không có binary phù hợp với profile, Conan biên dịch gói từ mã nguồn với --build=missing. Lúc đó recipe chạy phương thức source, thường tải gói mã nguồn từ trang gốc của dự án: GitHub, trang chủ thư viện, máy chủ phản chiếu. Những địa chỉ này không phải remote của Conan.
Với máy dựng sau proxy và tường lửa chỉ cho ConanCenter, bước tải nguồn sẽ lỗi dù conan search và conan download chạy tốt. Danh sách cho phép của tường lửa cần thêm các tên miền nguồn của từng gói, hoặc dùng bản phản chiếu nguồn trong mạng nội bộ.
Công cụ tải của recipe dùng cấu hình mạng của Conan
Recipe trong Conan 2 tải nguồn bằng các hàm như get và download trong conan.tools.files. Các hàm này dùng bộ gửi request của Conan, nên áp core.net.http:proxies, no_proxy_match và cacert_path giống request tới remote. Đây là điểm thuận lợi: cấu hình proxy một chỗ, áp cho cả remote lẫn nguồn.
Ngoại lệ là recipe tự gọi công cụ ngoài như git clone hay chạy một script tải riêng. Những công cụ đó có cấu hình proxy của riêng chúng. git cần http.proxy trong cấu hình git hoặc biến môi trường. Khi một gói lỗi ở bước nguồn mà gói khác không lỗi, đọc phương thức source của recipe để biết nó tải bằng cách nào.
tool_requires cũng cần mạng
Nhiều gói khai tool_requires như cmake, ninja, meson để biên dịch. Conan tải các công cụ này từ remote như gói thường, nên đi theo cấu hình proxy. Nhưng nếu công cụ phải biên dịch từ nguồn, lại quay về chuyện tải nguồn ở trên.
Với máy dựng CI, chạy một lần đủ mọi phụ thuộc và tool_requires ở máy có mạng tốt, lưu cache, rồi các lần sau dùng cache. Cách này giảm số lần đi qua proxy và giảm rủi ro lỗi giữa chừng do mạng.
Conan proxy với remote nội bộ và Artifactory
Remote nội bộ thường không cần proxy
Nhiều tổ chức dựng remote Conan nội bộ, thường trên Artifactory hay Nexus, đặt trong mạng công ty. Máy dựng tới remote nội bộ đi thẳng, chỉ ConanCenter hoặc remote ngoài mới cần proxy. Cấu hình hợp lý là proxies cho https, kèm no_proxy_match chứa URL của remote nội bộ.
core.net.http:proxies = {"https": "http://proxy.corp.example:8080"}
core.net.http:no_proxy_match = ["https://conan.corp.example/*"]
Trong lab, no_proxy_match với mẫu URL có ký tự đại diện làm request tới remote khớp mẫu đi thẳng. Nhớ rằng mẫu so với URL đầy đủ, nên viết cả https:// và dấu sao ở cuối.
Remote nội bộ làm bộ đệm cho ConanCenter
Artifactory có thể làm remote ảo, phản chiếu ConanCenter. Khi đó chỉ máy chủ Artifactory cần ra Internet qua proxy, các máy dựng chỉ nói chuyện với Artifactory trong mạng nội bộ. Cấu hình proxy chuyển từ hàng chục máy dựng về một máy chủ, dễ quản lý và dễ kiểm hơn nhiều.
Cách này cũng giúp khi ConanCenter chậm hay tạm ngừng: gói đã có trong bộ đệm của Artifactory vẫn tải được. Máy dựng không cần biết tài khoản proxy, nên bí mật chỉ nằm ở một máy chủ, giảm rủi ro lộ khi một máy dựng bị xâm nhập hay bị sao chép ảnh đĩa. Với tổ chức có nhiều máy dựng, đây thường là lựa chọn tốt hơn cấu hình proxy trên từng máy.
Thứ tự remote
Conan tìm gói theo thứ tự remote trong danh sách. Nếu remote nội bộ đứng trước ConanCenter, phần lớn request đi thẳng tới remote nội bộ, chỉ gói không có mới hỏi ConanCenter qua proxy. Đặt thứ tự bằng conan remote add với tham số vị trí hoặc conan remote update. Kiểm lại thứ tự bằng conan remote list sau mỗi lần thêm remote mới, vì remote thêm sau mặc định đứng cuối danh sách.
Conan proxy trong pipeline CI
Thứ tự các bước
Một pipeline Conan điển hình có bốn bước: cài Conan bằng pip, cài cấu hình chung bằng conan config install, đăng nhập remote riêng nếu có, rồi conan install với --build=missing. Bước pip cài Conan cũng cần proxy, đặt bằng cấu hình của pip hoặc biến HTTPS_PROXY.
Nếu dùng biến HTTPS_PROXY cho cả pip và Conan, một biến phục vụ cả hai bước. Nếu remote Conan nội bộ không đi proxy, thêm vào no_proxy_match của Conan và NO_PROXY cho pip nếu kho pip nội bộ cũng ở trong mạng.
Bước kiểm mạng đầu pipeline
Thêm bước conan search một gói nhỏ trên remote chính trước bước install. Bước này mất vài giây, lỗi proxy lộ ra ngay với thông điệp ProxyError rõ ràng, thay vì lẫn trong log biên dịch dài. Với remote có đăng nhập, thêm conan remote auth để kiểm tài khoản remote ở cùng bước.
Khi bước kiểm mạng đạt mà bước install lỗi ở tải nguồn, nhiều khả năng là tường lửa chặn tên miền nguồn của gói, không phải lỗi proxy của Conan.
Ghi lại thời gian tải
Khi tải gói qua proxy, ghi thời gian của bước conan install vào log pipeline. Theo dõi theo tuần giúp thấy proxy chậm dần hay ổn định. Nếu thời gian tăng mạnh mà số phụ thuộc không đổi, kiểm tốc độ proxy hoặc chuyển sang dùng remote nội bộ làm bộ đệm như đã nói ở trên.
Ghi log không lộ bí mật
Chạy Conan với mức log chi tiết khi gỡ lỗi có thể in URL proxy. Không bật mức chi tiết trên pipeline mặc định. Nếu cần, che biến chứa tài khoản bằng cơ chế che secret của hệ thống CI, và xóa log sau khi gỡ lỗi xong.
Đưa Conan proxy vào máy dựng thật
Cấu hình theo máy dựng
Gom cấu hình mạng vào global.conf của máy dựng, quản lý bằng conan config install từ một kho cấu hình chung. Cách này giúp mọi máy dựng có cùng proxies, no_proxy_match, timeout và cacert_path. Tài khoản proxy không nằm trong kho cấu hình, đưa vào qua biến môi trường của máy dựng.
Có thể dùng biểu thức trong global.conf để đọc biến môi trường cho phần tài khoản, tùy khả năng của bản Conan. Nếu không chắc, dùng HTTPS_PROXY từ biến môi trường cho phần có tài khoản và global.conf cho phần không bí mật.
Chọn loại proxy
Máy dựng tải gói từ ConanCenter hay remote đối tác thường cần proxy ổn định hơn là đổi IP. Proxy tĩnh hoặc datacenter phù hợp, IP không đổi giúp đối tác cho phép theo IP. Proxy xoay ít khi cần cho việc tải gói.
ProxyVN có proxy dân cư tĩnh, datacenter và proxy xoay, hỗ trợ HTTP và SOCKS5, cấp tài khoản user và mật khẩu. Nếu máy dựng cần proxy để tới ConanCenter, anh em có thể mua proxy Việt Nam tại trang chủ ProxyVN rồi đặt vào global.conf và chạy lại bảng ca thử.
Gỡ cấu hình thử
Sau khi thử, xóa thư mục CONAN_HOME thử nếu đã dùng thư mục riêng, hoặc xóa khóa proxies trong global.conf. Xóa lịch sử lệnh có chuỗi proxy. Nếu đã đăng nhập remote bằng tài khoản thật để thử, đăng xuất bằng conan remote logout.
Câu hỏi thường gặp về Conan proxy
Đặt proxy cho Conan 2 ở đâu. Trong global.conf với khóa core.net.http:proxies, hoặc qua biến môi trường HTTPS_PROXY mà requests đọc.
Hướng dẫn có conan.conf còn dùng được không. Không với Conan 2. Đó là cấu hình của Conan 1.
Vì sao Conan đi proxy dù không cấu hình gì. Máy có biến HTTPS_PROXY. Đặt clean_system_proxy nếu muốn bỏ qua.
Lỗi 407 trông thế nào. ProxyError kèm Tunnel connection failed: 407 Proxy Authentication Required.
Tài khoản remote có liên quan proxy không. Không. Remote login là tài khoản máy chủ gói, đi trong đường hầm HTTPS.
Có làm việc không mạng được không. Được nếu gói đã có trong cache, dùng -nr.
SOCKS5 có dùng được không. requests hỗ trợ SOCKS khi có gói PySocks, mình chưa thử với Conan.
Có cần cấu hình proxy cho từng remote không. Không có khóa proxy theo remote trong danh sách mình thấy. Dùng no_proxy_match để loại remote không cần proxy, phần còn lại đi theo core.net.http:proxies.
Đặt timeout bao nhiêu cho proxy chậm. Bắt đầu với giá trị mặc định, tăng dần khi thấy lỗi quá hạn khi tải gói lớn. Với gói binary vài trăm megabyte qua proxy dân cư, thời gian chờ cần dài hơn nhiều so với conan search.
Có thể kiểm proxy mà không tải gói không. Có. conan search một gói nhỏ trên remote là cách nhẹ nhất, chỉ trao đổi danh sách phiên bản.
Checklist Conan proxy

Checklist Conan proxy
Trước khi dùng trên máy dựng
- Conan 2 với global.conf, không dùng conan.conf.
- Khóa https trong core.net.http:proxies.
- Mật khẩu mã hóa phần trăm, chú ý %% khi viết bằng printf.
- Quyết định theo biến môi trường hay clean_system_proxy.
- no_proxy_match cho remote nội bộ.
- max_retries thấp để không khóa tài khoản proxy khi sai mật khẩu.
- cacert_path hoặc trust_store sau proxy kiểm tra TLS.
- Tách tài khoản proxy khỏi remote login.
- Dùng cache với -nr khi mạng không ổn định.
Giới hạn của lab
Lab chạy Conan 2.33.0 trên Windows với proxy tự dựng và remote ConanCenter thật. Chưa thử remote riêng có đăng nhập, chưa biên dịch binary, chưa thử SOCKS, chưa thử proxy kiểm tra TLS và chưa thử lưu, khôi phục cache.
Conan proxy và những điều cần nhớ
Conan proxy trong Conan 2 đặt bằng core.net.http:proxies trong global.conf, khóa https là khóa quyết định. Conan đọc HTTPS_PROXY trừ khi bật clean_system_proxy, bỏ qua bằng no_proxy_match. ProxyError là lỗi proxy, 401 hay 403 là lỗi remote. Cần proxy ổn định cho Conan proxy, liên hệ Proxy.vn - Nhà cung cấp dịch vụ proxy chất lượng hàng đầu Việt Nam.