如何在代理后面使用 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 或类似用例中),则必须使用 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_FULLURI
和 HTTPS_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=
)。
发现打字错误?文档中有什么不对?分叉并编辑 它!