如何在代理伺服器的 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_proxyHTTP_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_FULLURIHTTPS_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=)。

發現錯別字了嗎?這份文件中有任何不對勁的地方嗎?分岔並進行編輯