存在场景:服务器A可访问公网,B不能访问公网,此时服务器B上的服务可以通过A上的Socks代理访问公网。
- 在服务器A安装goproxy(也可以使用其他代理工具),启动socks5代理,具体见官方文档。
- 服务器B上的Java服务启动时,设置以下jvm参数
-DsocksProxyHost=hostname
-DsocksProxyPort=port
# 不通过代理访问的地址 必须同时设置以下两个才有效
-Dhttp.nonProxyHosts=localhost|127.*|[::1]
-DsocksNonProxyHosts=localhost|127.*|[::1]
一些第三方库(如:okhttp、httpclient)不会使用该代理配置
参考资料
https://github.com/snail007/goproxy/blob/master/README_ZH.md
https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html
https://stackoverflow.com/questions/59106624/openjdk8-and-nonproxyhosts-is-not-working