如何在代理伺服器的 Composer 後端使用 Composer#
Composer 和許多其他工具使用環境變數來控制代理伺服器的使用,並支援
http_proxy
- 用於 HTTP 要求的代理伺服器https_proxy
- 用於 HTTPS 要求的代理伺服器CGI_HTTP_PROXY
- 用於非 CLI 環境中的 HTTP 要求的代理伺服器no_proxy
- 不需要代理伺服器的網域
這些命名變數是一種慣例,而非官方標準,其演進和使用方式在不同的作業系統和工具中很複雜。Composer 偏好使用小寫名稱,但在適當的情況下接受大寫名稱。
用量#
Composer 需要特定環境變數來進行 HTTP 和 HTTPS 要求。例如
http_proxy=http://proxy.com:80
https_proxy=http://proxy.com:80
也可以使用大寫名稱。
非 CLI 用量#
Composer 在非 CLI 環境中不尋找 http_proxy
或 HTTP_PROXY
。如果您以這種方式執行它(例如,整合到 CMS 或類似用途),您必須對 HTTP 要求使用 CGI_HTTP_PROXY
CGI_HTTP_PROXY=http://proxy.com:80
https_proxy=http://proxy.com:80
# cgi_http_proxy can also be used
注意:CGI_HTTP_PROXY 是由 Perl 在 2001 年引入的,用於防止要求標頭被竄改,並在 2016 年受到廣泛報導這個漏洞時變得流行:https://httpoxy.org
語法#
如上例中所述,使用 scheme://host:port
。儘管缺少的 scheme 預設為 http,而缺少的 port 對於 http/https scheme 預設為 80/443,但其他工具可能會需要這些值。
主機可以使用 IPv4 的點分四進位法指定為 IP 位址,或用於 IPv6 的方括號括起來。
授權#
Composer 支援基本驗證,使用 schema://user:pass@host:port
語法。使用者名稱或密碼中保留的網址字元必須經過百分比編碼。例如
user: me@company
pass: p@ssw$rd
proxy: http://proxy.com:80
# percent-encoded authorization
me%40company:p%40ssw%24rd
scheme://me%40company:p%40ssw%24rd@proxy.com:80
注意:使用者名稱和密碼元件必須分別進行百分比編碼,然後再與冒號分隔符號組合。使用者名稱不能包含冒號(即使已經是百分比編碼),因為代理伺服器會將元件拆分為找到的第一個冒號。
HTTPS 代理伺服器#
Composer 支援 HTTPS 代理伺服器,其中 HTTPS 是用於連線到代理伺服器的架構,但僅限於 PHP 7.3,搭配 curl 版本 7.52.0 或以上。
http_proxy=https://proxy.com:443
https_proxy=https://proxy.com:443
繞過特定網域的代理伺服器#
使用 no_proxy
(或 NO_PROXY
)環境變數來設定一個代理伺服器不應使用的網域,以逗號分隔。
no_proxy=example.com
# Bypasses the proxy for example.com and its sub-domains
no_proxy=www.example.com
# Bypasses the proxy for www.example.com and its sub-domains, but not for example.com
網域可以限制在特定埠號(例如 :80
),也可以指定為 IP 位址或 CIDR 表示法的 IP 位址區段。
IPv6 位址不需要像 http_proxy/https_proxy 值那樣用方括弧括起來,儘管這種格式是可以接受的。
將值設為 *
將會繞過所有要求的代理伺服器。
注意:網域名稱中的開頭點沒有意義,在處理前會將其移除。
已淘汰的環境變數#
Composer 最初提供了 HTTP_PROXY_REQUEST_FULLURI
和 HTTPS_PROXY_REQUEST_FULLURI
來幫助減輕異常代理伺服器造成的影響。現在已不再需要或使用它們。
需求變更#
如果未設定 https_proxy
,Composer <2.8 會在 HTTP 和 HTTPS 要求中使用 http_proxy
,但從 Composer 2.8.0 開始,它需要 特定於架構 的環境變數。
變更的原因是讓 Composer 與其他熱門工具目前的實務做法保持一致。為了協助轉換,從 Composer 2.7.3 開始,原始行為仍然存在,但會顯示一條警告訊息,指示使用者新增 https_proxy
環境變數。
若要在轉換期間避免原始行為,請設定一個空的環境變數(https_proxy=
)。
發現錯別字了嗎?這份文件中有任何不對勁的地方嗎?分岔並進行編輯!