Java忽略http代理设置

问题描述 投票:0回答:1

我在Kubernetes中运行了一堆Java应用程序。这主要是具有很大代码基础的遗留代码。问题是几乎所有的应用程序都使用一些第三方库。这会导致Java(或确切地说是那些库)忽略Docker容器中的http_proxyhttps_proxy环境变量。它也忽略Java选项。

由于代码库庞大且具有多个依赖关系,因此将其重写以正确使用http代理是一项艰巨的任务。我们在一个应用程序中重新配置了与Jsoup相关的全部代码。这很容易做到,但是我们有更复杂的应用程序,甚至有些根本没有源代码。

因此,有什么方法可以使整个HTTP代理系统的AKA对Java透明?只需通过代理强制任何http / s流量即可。

我已经尝试了许多技巧和调整,但一无所获。请记住,我无法在k8s节点上设置全局规则。我不想与多个HTTP代理一起使用。

感谢任何帮助。

更新:

运行Java与:

-Dhttp.proxyHost=my_proxy_ip -Dhttp.proxyPort=my_proxy_port

或:

-Djava.net.useSystemProxies=true

不幸的是,它不起作用。像这样进行硬编码:

System.getProperties().put("http.proxyHost", "someProxyURL");
System.getProperties().put("http.proxyPort", "someProxyPort");

也失败。

这是因为有第三方库,例如Jsoup。除非我们将该库配置为使用代理,否则它不会。仅具有Java本地http工具的代理才能正确使用此类设置。

java docker http-proxy
1个回答
0
投票

您可以在Docker主机本身中设置代理,而不是在容器中设置。

$ sudo mkdir -p /etc/systemd/system/docker.service.d

创建一个名为/etc/systemd/system/docker.service.d/http-proxy.conf的文件,该文件添加HTTP_PROXY环境变量:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

刷新更改并重新启动

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

您可以找到废弃的Docker文档HERE

© www.soinside.com 2019 - 2024. All rights reserved.