温馨提示×

Ubuntu中Java网络配置如何设置

小樊
35
2026-01-01 04:55:54
栏目: 编程语言

Ubuntu 中 Java 网络配置实用指南

一 前置检查

  • 确认已安装 JDK/JRE:执行 java -versionjavac -version。如未安装,可安装 OpenJDK:sudo apt update && sudo apt install default-jdk
  • 确认网络连通性:ping 一个可达域名或 IP,确保基础网络正常。
  • 如使用代理,先确认代理地址、端口、是否需要认证,以及是否同时需要 HTTPHTTPS 代理。

二 代理配置

  • 应用级配置(推荐,优先级最高)
    • 启动参数方式(命令行):
      java \
        -Dhttp.proxyHost=proxy.example.com \
        -Dhttp.proxyPort=8080 \
        -Dhttps.proxyHost=proxy.example.com \
        -Dhttps.proxyPort=8080 \
        -Dhttp.nonProxyHosts=localhost|127.0.0.1 \
        -jar your-application.jar
      
    • 代码中设置(需在发起网络请求前):
      System.setProperty("http.proxyHost", "proxy.example.com");
      System.setProperty("http.proxyPort", "8080");
      System.setProperty("https.proxyHost", "proxy.example.com");
      System.setProperty("https.proxyPort", "8080");
      System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");
      
    • 代理认证:
      System.setProperty("http.proxyUser", "username");
      System.setProperty("http.proxyPassword", "password");
      
    • 说明:使用 http.nonProxyHosts 指定直连主机(竖线分隔),避免内网地址走代理。
  • 环境变量方式(对部分 JVM 与库生效,优先级低于应用级)
    • 当前终端会话生效:
      export http_proxy=http://proxy.example.com:8080
      export https_proxy=http://proxy.example.com:8080
      export no_proxy=localhost,127.0.0.1
      
    • 全局持久化(影响登录会话及多数命令行工具):
      • 写入 /etc/environment(系统级环境变量,图形登录也会读取):
        http_proxy=http://proxy.example.com:8080
        https_proxy=http://proxy.example.com:8080
        no_proxy=localhost,127.0.0.1
        
      • 或写入 ~/.bashrc(仅对 bash 会话生效):在文件末尾添加上述 export 行并执行 source ~/.bashrc
    • 注意:某些工具(如 Docker)不会读取上述变量,需要单独配置。

三 主机网络与防火墙

  • 如使用 UFW 放行应用访问外网:
    sudo ufw allow out to any port 80
    sudo ufw allow out to any port 443
    
  • 如应用监听端口(例如 8080)需对外提供访问:
    sudo ufw allow 8080/tcp
    
  • 修改后可用 sudo ufw status 查看规则是否生效。

四 验证与排错

  • 快速连通性测试(Java 程序):
    import java.net.InetAddress;
    public class NetTest {
        public static void main(String[] args) throws Exception {
            InetAddress a = InetAddress.getByName("www.google.com");
            System.out.println("OK: " + a.getHostAddress());
        }
    }
    
  • 本机端口连通性测试(bash):
    nc -vz 127.0.0.1 8080    # 应用端口
    curl -I https://www.google.com
    
  • 常见问题
    • 代理认证失败:确认 http.proxyUser/Password 正确,且未被日志或代码遮蔽。
    • 代理不生效:检查是否同时存在多处配置,记住优先级为:应用启动参数 > 代码中 System.setProperty > 环境变量
    • DNS 解析失败:确认 /etc/resolv.conf 或系统 DNS 配置正确;必要时在 Java 启动参数中显式设置 -Djava.net.preferIPv4Stack=true
    • 本机访问被拒:确认应用监听 0.0.0.0 而非 127.0.0.1,且防火墙已放行对应端口。

0