企业代理背后的 Apache

Posted

技术标签:

【中文标题】企业代理背后的 Apache【英文标题】:Apache behind corporate proxy 【发布时间】:2015-12-25 14:46:48 【问题描述】:

我正在开发一个 php 应用程序。我正在使用 wamp 并且我支持公司代理。我正在使用cntlm 来验证NTLM。我需要 curl google geocoding api,为此我使用了以下有效设置:

    curl_setopt($ch,CURLOPT_PROXY, '127.0.0.1:3128');
    curl_setopt($ch, CURLOPT_PROXYPORT, 3128);

我想找到一种方法来避免为 CURL 设置这些选项。我相信我可以使用 Apache 设置,但我不确定。我需要找到这个解决方案的原因是:

    在生产环境中不会有这样的代理(目前上述选项仅在环境变量设置为 DEV env 时使用,但仍然:这不是最佳解决方案) 如果我想使用 3rd 方 SDK(例如 facebook php sdk),它们在内部使用 CURL,但它们不一定公开更改 CURL 选项的方法(例如 facebook sdk 没有)。我不想更改 SDK 源代码以适应我的代理

我尝试了什么:

到目前为止,我在 apache 上打开了 proxy_module,并在 httpd.conf 中添加了以下行,但没有成功

ProxyRemote * http://127.0.0.1:3128

我仍然无法访问互联网。我google了很多,但我找不到解决方案,有什么想法吗?

我可以找到很多人在谈论同样的问题,但我没有找到任何全面的解决方案,因此我提出了赏金。

我发现了什么:

我在其中找到了this bug:但我不确定这是否适用于 curl,无论如何我找不到如何修改 php.ini

[2010-12-20 14:03 UTC] jani@php.net -总结:改变默认的http-wrapper +总结:添加 php.ini 选项以设置包装器的默认代理 -包:功能/更改请求 +Package:流相关 -PHP版本:5CVS +PHP 版本:*

[2011-04-05 11:29 UTC] play4fun_82 at yahoo dot com 嗨,我有 同样的问题。我的解决方案是通过代理服务器与cntml 隧道工具。你配置cntml代理转发http请求 在端口上的本地主机上接收到正确的目的地 身份验证。

在梨中你只需配置

pear config-set http_proxy 127.0.0.1:3128

3128 - 是cntlm中配置的端口(可以是任何其他空闲端口)。

非常感谢

【问题讨论】:

虽然我无法证明这一点,但我怀疑这是不可能的(或者至少 - 是不可取的),因为根据调用 PHP 的方式,您会得到不同的结果。命令行中的 PHP 依赖于任何 Apache 设置;从 Apache 提供的 PHP 脚本是否可以访问 Apache 设置的某些设置。 好的,那么可以通过PHP设置吗?环境变量?安装与我的代理进行 apache/php 对话的 3rd 方应用程序? 奇怪的是,在命令行上使用set http_proxy=http://192.168.61.25:3128 设置环境变量http_proxy 可以完美地与PHP 中的cURL 配合使用;如果它是通过SetEnv http_proxy http://192.168.61.25:3128 在 Apache 环境中设置的,它存在,但被忽略。 谢谢,你能补充更多细节吗?我尝试在终端中设置 http_proxy,但它仍然无法正常工作。我应该在“哪里”运行命令? 我在 DOS 窗口中这样使用它:C:\Program Files\xampp\htdocs\test>set https_proxy=https://192.168.61.25:3128C:\Program Files\xampp\htdocs\test>"\Program Files\xampp\php\php" curltest.php。但是命令行可能不是你想要的。 【参考方案1】:

您是说您希望 WAMP 上的此功能仅用于您的开发计算机,对吗? SDK 在生产环境中无需修改即可工作,因此您可以利用 Window 的 Host 文件来重定向请求。

Here's a walkthrough.

【讨论】:

谢谢,你是对的!但是,您能否添加更多详细信息?我知道什么是主机文件,并且我过去已经更改过它,但我不知道如何根据我的目的进行修改。谢谢【参考方案2】:

我认为您可以通过 Proxifier(http://www.proxifier.com) 等代理工具来实现。

AFAIK,它们可以捕获来自选定应用程序的流量并自动重定向到代理。

不是一个完美的解决方案,但在开发机器上应该很有用。

【讨论】:

【参考方案3】:

阅读this 文章后,我正要认输,但实际上有一个简单的解决方案。我不得不使用 Windows 环境变量,最后将系统变量设置为 https_proxy=https://localhost:3128 工作!在它不起作用之前,因为我将它设置为 127.0.0.1:3128。运行命令

reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" | find /i "proxyserver"

然后将答案复制/粘贴到系统变量中,现在它可以工作了!!

【讨论】:

以上是关于企业代理背后的 Apache的主要内容,如果未能解决你的问题,请参考以下文章

Apache反向代理背后的Keycloak

企业代理背后的 Websockets

企业代理背后的 Websockets

企业代理背后的 docker-machine

Apache 反向代理背后的自签名证书问题?

Apache 代理设置背后的 Icecast - 如何保留原始侦听器 IP