从零开始:Java 服务部署与 HTTPS 访问全攻略

Luca Ju
2025-08-18 / 0 评论 / 16 阅读 / 正在检测是否收录...

前言

在现代 Web 应用开发中,将 Java 服务部署到服务器并通过 HTTPS 安全访问是一项基础且重要的技能。本文将详细记录从环境准备到最终实现 HTTPS 访问的完整过程,适合新手开发者参考学习。

一、JDK 环境安装

Java 服务运行依赖 JDK 环境,我们选择安装开源免费的 OpenJDK 17 版本。

1. 更新系统索引包

首先需要更新 Ubuntu 系统的软件包索引,确保能获取到最新的软件版本信息:

sudo apt update

2. 安装 OpenJDK 17

执行以下命令安装 OpenJDK 17:

sudo apt install openjdk-17-jdk

安装过程中系统会自动处理依赖关系,无需额外操作。

3. 验证 JDK 安装结果

安装完成后,通过以下命令验证是否安装成功:

java -version

如果安装成功,会显示类似如下的版本信息:

openjdk version "17.0.x" 20xx-xx-xx
OpenJDK Runtime Environment (build 17.0.x+xx-Ubuntu-1ubuntux)
OpenJDK 64-Bit Server VM (build 17.0.x+xx-Ubuntu-1ubuntux, mixed mode, sharing)

4. 配置 JAVA_HOME 环境变量

为了让系统和其他工具能正确识别 JDK 位置,需要配置 JAVA_HOME 环境变量:

echo "export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> ~/.bashrc
source ~/.bashrc

执行完成后,JAVA_HOME 环境变量将在每次登录时自动生效。

二、Java 服务打包与部署

完成 JDK 环境配置后,接下来需要将开发好的 Java 服务打包并上传到服务器。

1. 服务打包

使用 Maven 工具对 Java 项目进行打包,推荐通过 IDEA 的 Maven 插件操作:

  • 在 IDEA 右侧的 Maven 面板中找到项目
  • 展开 Lifecycle 选项
  • 双击 package 命令执行打包操作
  • 打包成功后,会在项目的 target 目录下生成对应的 JAR 文件

2. 上传服务到服务器

将打包好的 JAR 文件通过 SFTP 工具(如 Termius)或 scp 命令上传到服务器的指定目录,例如/opt/java/services/目录。

3. 启动 Java 服务

通过以下命令启动 Java 服务:

nohup java -jar /opt/java/services/your-service.jar &

其中&符号表示让服务在后台运行。如果需要更完善的服务管理,建议配置 systemd 服务。

三、Nginx 配置实现 HTTPS 访问

为了实现 HTTPS 访问并优化请求转发,我们需要配置 Nginx 作为反向代理服务器。

1. 创建或编辑 Nginx 配置文件

执行以下命令创建新的 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/your_domain.conf

如果你已有配置文件,直接编辑对应文件即可。

2. 配置 HTTPS 与反向代理

在配置文件中添加以下内容,实现 HTTP 到 HTTPS 的跳转以及请求转发:

server {
    listen 80;
    server_name yourdomain.com;  # 替换为你的实际域名
    
    # 将所有HTTP请求强制跳转至HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;  # 替换为你的实际域名

    # SSL证书配置(请替换为你的证书实际路径)
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    # SSL安全优化配置
    ssl_protocols TLSv1.2 TLSv1.3;  # 支持的TLS协议版本
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_session_cache shared:SSL:10m;  # SSL会话缓存设置
    ssl_session_timeout 10m;  # SSL会话超时时间

    # 将所有 /app 开头的请求转发到Java服务的9999端口
    location /app/ {
        proxy_pass http://127.0.0.1:9999;
        
        # 传递原始请求信息(HTTPS环境关键配置)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;  # 重要:传递HTTPS协议信息
        
        # 超时设置(根据实际服务需求调整)
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
    }

    # 其他路径处理
    location / {
        # 可以根据需求配置为返回404或指向其他服务
        return 404;
    }
}

3. 启用 Nginx 配置

创建符号链接将配置文件添加到 sites-enabled 目录,使 Nginx 能够识别该配置:

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/

4. 检查并重启 Nginx

配置完成后,先检查配置文件是否有语法错误:

sudo nginx -t

如果显示 "nginx: configuration file /etc/nginx/nginx.conf test is successful",说明配置无误,可以重启 Nginx 使配置生效:

sudo systemctl restart nginx

四、验证 HTTPS 访问

完成以上所有步骤后,通过浏览器访问https://yourdomain.com/app/user/login(替换为你的实际域名和接口路径),如果能正常访问并获得服务响应,说明整个部署过程成功完成。

常见问题排查

  1. 如果无法访问 HTTPS 服务,先检查服务器防火墙是否开放 443 端口
  2. 证书路径错误会导致 Nginx 启动失败,需确保证书文件存在且权限正确
  3. Java 服务未启动或端口被占用会导致 502 错误,可通过netstat -tlnp查看端口占用情况
  4. 配置文件修改后未重启 Nginx 会导致配置不生效,记得每次修改后重启服务

通过本文的步骤,你已经成功实现了 Java 服务的部署和 HTTPS 访问配置。在实际生产环境中,还可以根据需求添加服务监控、日志管理等功能,进一步提升服务的稳定性和可维护性。

0

评论 (0)

取消