如何在代理后面使用 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 或类似用例中),则必须使用 CGI_HTTP_PROXY 用于 HTTP 请求

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,如上面的示例所示。尽管缺少方案默认为 http,而缺少端口对于 http/https 方案默认为 80/443,但其他工具可能需要这些值。

主机可以指定为 IP 地址,使用点分十进制表示法表示 IPv4,或者用方括号括起来表示 IPv6。

授权#

Composer 支持基本授权,使用 scheme://user:pass@host:port 语法。用户名或密码中的保留 URL 字符必须进行百分比编码。例如

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%[email protected]: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 来帮助缓解与行为不端的代理相关的问题。这些不再需要或使用。

要求更改#

Composer <2.8 如果未设置 https_proxy,则对 HTTP 和 HTTPS 请求都使用 http_proxy,但从 Composer 2.8.0 开始,它需要特定于方案的环境变量。

更改此行为的原因是为了使 Composer 与其他流行工具中的当前实践保持一致。为了帮助过渡,从 Composer 2.7.3 开始,保留了原始行为,但会显示一条警告消息,指示用户添加 https_proxy 环境变量。

要防止在过渡期间出现原始行为,请设置一个空环境变量 (https_proxy=)。

发现打字错误?文档中有什么不对?分叉并编辑 它!